Skip to content

Commit 8720d27

Browse files
committed
make logger creation and tracking more threadsafe
1 parent f057254 commit 8720d27

File tree

1 file changed

+14
-5
lines changed

1 file changed

+14
-5
lines changed

src/Microsoft.Extensions.Logging.MSBuild/MSBuildLoggerProvider.cs

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ namespace Microsoft.Extensions.Logging.MSBuild;
1212
public class MSBuildLoggerProvider : ILoggerProvider, ISupportExternalScope
1313
{
1414
private readonly TaskLoggingHelper _loggingHelper;
15-
private List<MSBuildLogger> _loggers = new List<MSBuildLogger>();
15+
private readonly Dictionary<string, MSBuildLogger> _loggers = [];
1616
private IExternalScopeProvider? _scopeProvider;
1717

1818
public MSBuildLoggerProvider(TaskLoggingHelper loggingHelperToWrap)
@@ -22,8 +22,14 @@ public MSBuildLoggerProvider(TaskLoggingHelper loggingHelperToWrap)
2222

2323
public ILogger CreateLogger(string categoryName)
2424
{
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+
}
2733
return logger;
2834
}
2935

@@ -32,9 +38,12 @@ public void Dispose() { }
3238
public void SetScopeProvider(IExternalScopeProvider scopeProvider)
3339
{
3440
_scopeProvider = scopeProvider;
35-
foreach (var logger in _loggers)
41+
lock (_loggers)
3642
{
37-
logger.SetScopeProvider(scopeProvider);
43+
foreach (var logger in _loggers.Values)
44+
{
45+
logger.SetScopeProvider(scopeProvider);
46+
}
3847
}
3948
}
4049
}

0 commit comments

Comments
 (0)