@@ -12,7 +12,7 @@ namespace Microsoft.Extensions.Logging.MSBuild;
12
12
public class MSBuildLoggerProvider : ILoggerProvider , ISupportExternalScope
13
13
{
14
14
private readonly TaskLoggingHelper _loggingHelper ;
15
- private List < MSBuildLogger > _loggers = new List < MSBuildLogger > ( ) ;
15
+ private readonly Dictionary < string , MSBuildLogger > _loggers = [ ] ;
16
16
private IExternalScopeProvider ? _scopeProvider ;
17
17
18
18
public MSBuildLoggerProvider ( TaskLoggingHelper loggingHelperToWrap )
@@ -22,8 +22,14 @@ public MSBuildLoggerProvider(TaskLoggingHelper loggingHelperToWrap)
22
22
23
23
public ILogger CreateLogger ( string categoryName )
24
24
{
25
- var logger = new MSBuildLogger ( categoryName , _loggingHelper , _scopeProvider ) ;
26
- _loggers . Add ( logger ) ;
25
+ if ( ! _loggers . TryGetValue ( categoryName , out var logger ) )
26
+ {
27
+ logger = new MSBuildLogger ( categoryName , _loggingHelper , _scopeProvider ) ;
28
+ lock ( _loggers )
29
+ {
30
+ _loggers [ categoryName ] = logger ;
31
+ }
32
+ }
27
33
return logger ;
28
34
}
29
35
@@ -32,9 +38,12 @@ public void Dispose() { }
32
38
public void SetScopeProvider ( IExternalScopeProvider scopeProvider )
33
39
{
34
40
_scopeProvider = scopeProvider ;
35
- foreach ( var logger in _loggers )
41
+ lock ( _loggers )
36
42
{
37
- logger . SetScopeProvider ( scopeProvider ) ;
43
+ foreach ( var logger in _loggers . Values )
44
+ {
45
+ logger . SetScopeProvider ( scopeProvider ) ;
46
+ }
38
47
}
39
48
}
40
49
}
0 commit comments