Skip to content

Commit e59c3cd

Browse files
authored
NLogLoggerFactory - Optimize concurrency for CreateLogger (#692)
1 parent 2beb830 commit e59c3cd

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

src/NLog.Extensions.Logging/Logging/NLogLoggerFactory.cs

+10-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using System;
2-
using System.Collections.Generic;
2+
using System.Collections.Concurrent;
33
using Microsoft.Extensions.Logging;
44
using NLog.Common;
55

@@ -10,7 +10,7 @@ namespace NLog.Extensions.Logging
1010
/// </summary>
1111
public class NLogLoggerFactory : ILoggerFactory
1212
{
13-
private readonly Dictionary<string, Microsoft.Extensions.Logging.ILogger> _loggers = new Dictionary<string, Microsoft.Extensions.Logging.ILogger>(StringComparer.Ordinal);
13+
private readonly ConcurrentDictionary<string, Microsoft.Extensions.Logging.ILogger> _loggers = new ConcurrentDictionary<string, Microsoft.Extensions.Logging.ILogger>(StringComparer.Ordinal);
1414

1515
private readonly NLogLoggerProvider _provider;
1616

@@ -68,15 +68,18 @@ protected virtual void Dispose(bool disposing)
6868
/// <returns>The <see cref="Microsoft.Extensions.Logging.ILogger" />.</returns>
6969
public Microsoft.Extensions.Logging.ILogger CreateLogger(string categoryName)
7070
{
71-
lock (_loggers)
71+
if (!_loggers.TryGetValue(categoryName, out var logger))
7272
{
73-
if (!_loggers.TryGetValue(categoryName, out var logger))
73+
lock (_loggers)
7474
{
75-
logger = _provider.CreateLogger(categoryName);
76-
_loggers[categoryName] = logger;
75+
if (!_loggers.TryGetValue(categoryName, out logger))
76+
{
77+
logger = _provider.CreateLogger(categoryName);
78+
_loggers[categoryName] = logger;
79+
}
7780
}
78-
return logger;
7981
}
82+
return logger;
8083
}
8184

8285
/// <summary>

0 commit comments

Comments
 (0)