Skip to content

Commit 22b59a7

Browse files
committed
Get more logs out of msbuild
1 parent 7e6f106 commit 22b59a7

File tree

1 file changed

+66
-18
lines changed

1 file changed

+66
-18
lines changed

src/Ionide.ProjInfo/Library.fs

+66-18
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,44 @@ module ProjectLoader =
337337
| Success of LoadedProject
338338
| Error of string
339339

340-
let internal logger (writer: StringWriter) =
340+
let internal msBuildLogger = lazy (LogProvider.getLoggerByName "MsBuild") //lazy because dotnet test wont pickup our logger otherwise
341+
342+
let msBuildToLogProvider () =
343+
let msBuildLogger = msBuildLogger.Value
344+
345+
{ new ILogger with
346+
member this.Initialize(eventSource: IEventSource) : unit =
347+
eventSource.ErrorRaised.Add(fun t -> msBuildLogger.error (Log.setMessage t.Message))
348+
eventSource.WarningRaised.Add(fun t -> msBuildLogger.warn (Log.setMessage t.Message))
349+
eventSource.BuildStarted.Add(fun t -> msBuildLogger.info (Log.setMessage t.Message))
350+
eventSource.BuildFinished.Add(fun t -> msBuildLogger.info (Log.setMessage t.Message))
351+
352+
eventSource.MessageRaised.Add(fun t ->
353+
match t.Importance with
354+
| MessageImportance.High -> msBuildLogger.debug (Log.setMessage t.Message)
355+
| MessageImportance.Normal
356+
| MessageImportance.Low
357+
| _ -> msBuildLogger.trace (Log.setMessage t.Message)
358+
)
359+
360+
eventSource.TargetStarted.Add(fun t -> msBuildLogger.trace (Log.setMessage t.Message))
361+
eventSource.TargetFinished.Add(fun t -> msBuildLogger.trace (Log.setMessage t.Message))
362+
eventSource.TaskStarted.Add(fun t -> msBuildLogger.trace (Log.setMessage t.Message))
363+
eventSource.TaskFinished.Add(fun t -> msBuildLogger.trace (Log.setMessage t.Message))
364+
365+
member this.Parameters
366+
with get (): string = ""
367+
and set (v: string): unit = ()
368+
369+
member this.Shutdown() : unit = ()
370+
371+
member this.Verbosity
372+
with get (): LoggerVerbosity = LoggerVerbosity.Detailed
373+
and set (v: LoggerVerbosity): unit = ()
374+
}
375+
376+
377+
let internal stringWriterLogger (writer: StringWriter) =
341378
{ new ILogger with
342379
member this.Initialize(eventSource: IEventSource) : unit =
343380
// eventSource.ErrorRaised.Add(fun t -> writer.WriteLine t.Message) //Only log errors
@@ -379,15 +416,19 @@ module ProjectLoader =
379416
Some tfm
380417

381418
let createLoggers (paths: string seq) (binaryLogs: BinaryLogGeneration) (sw: StringWriter) =
382-
let logger = logger (sw)
419+
let swLogger = stringWriterLogger (sw)
420+
let msBuildLogger = msBuildToLogProvider ()
383421

384422
let logFilePath (dir: DirectoryInfo, projectPath: string) =
385423
let projectFileName = Path.GetFileName projectPath
386424
let logFileName = Path.ChangeExtension(projectFileName, ".binlog")
387425
Path.Combine(dir.FullName, logFileName)
388426

389427
match binaryLogs with
390-
| BinaryLogGeneration.Off -> [ logger ]
428+
| BinaryLogGeneration.Off -> [
429+
swLogger
430+
msBuildLogger
431+
]
391432
| BinaryLogGeneration.Within dir ->
392433
let loggers =
393434
paths
@@ -397,7 +438,8 @@ module ProjectLoader =
397438
)
398439

399440
[
400-
logger
441+
swLogger
442+
msBuildLogger
401443
yield! loggers
402444
]
403445

@@ -923,12 +965,11 @@ type WorkspaceLoaderViaProjectGraph private (toolsPath, ?globalProperties: (stri
923965
pg
924966

925967
let loadProjects (projects: ProjectGraph, customProperties: string list, binaryLogs: BinaryLogGeneration) =
926-
let handleError (e: exn) =
968+
let handleError (msbuildErrors: string) (e: exn) =
927969
let msg = e.Message
928-
printfn "error -> %A" e
929970

930971
logger.error (
931-
Log.setMessage "Failed loading"
972+
Log.setMessageI $"Failed loading {msbuildErrors:msbuildErrors}"
932973
>> Log.addExn e
933974
)
934975

@@ -994,27 +1035,34 @@ type WorkspaceLoaderViaProjectGraph private (toolsPath, ?globalProperties: (stri
9941035

9951036
bm.EndBuild()
9961037

1038+
let msbuildMessage = sw.ToString()
1039+
9971040
if
9981041
result.Exception
9991042
|> isNull
10001043
|> not
10011044
then
1002-
handleError result.Exception
1045+
handleError msbuildMessage result.Exception
10031046
else
10041047
let buildProjs =
10051048
result.ResultsByNode.Keys
10061049
|> Seq.collect (fun (pgn: ProjectGraphNode) -> seq { yield pgn.ProjectInstance })
10071050
|> Seq.toList
10081051

1009-
logger.info (
1010-
Log.setMessage "{overallCode}, projects built {count} {projects} "
1011-
>> Log.addContextDestructured
1012-
"count"
1013-
(buildProjs
1014-
|> Seq.length)
1015-
>> Log.addContextDestructured "overallCode" result.OverallResult
1016-
>> Log.addExn result.Exception
1017-
)
1052+
let projectsBuilt = Seq.length buildProjs
1053+
1054+
match result.OverallResult with
1055+
| BuildResultCode.Success ->
1056+
logger.info (
1057+
Log.setMessageI $"Overall Build: {result.OverallResult:overallCode}, projects built {projectsBuilt:count}"
1058+
>> Log.addExn result.Exception
1059+
)
1060+
| BuildResultCode.Failure
1061+
| _ ->
1062+
logger.error (
1063+
Log.setMessageI $"Overall Build: {result.OverallResult:overallCode}, projects built {projectsBuilt:count} : {msbuildMessage:msbuildMessage} "
1064+
>> Log.addExn result.Exception
1065+
)
10181066

10191067
let projects =
10201068
buildProjs
@@ -1058,7 +1106,7 @@ type WorkspaceLoaderViaProjectGraph private (toolsPath, ?globalProperties: (stri
10581106

10591107
allProjectOptions :> seq<_>
10601108
with e ->
1061-
handleError e
1109+
handleError "" e
10621110

10631111

10641112
interface IWorkspaceLoader with

0 commit comments

Comments
 (0)