我正在使用带有NLog的asp.net core 2.0.3,我遇到了日志记录(我认为)不会消失的问题。我很感激可能有助于解决这个问题的任何事情(甚至提示如何调试)。
说明
启动应用程序并ping一个端点(似乎无关紧要),创建新线程。在重复多次线程计数建立之后,看起来这些线程没有被杀死。从长远来看,这会导致OutOfMemoryException。
我的调查
似乎问题与日志记录有关,因为在附加到其中一个线程之后,callstack显示以下内容:
(...)
0e 000000be`0923e8b0 00007ff9`942921e8 System_Private_CoreLib!System.Threading.SemaphoreSlim.WaitUntilCountOrTimeout(Int32, UInt32, System.Threading.CancellationToken)$##60020BD+0x90
0f 000000be`0923e900 00007ff9`355b6d12 System_Private_CoreLib!System.Threading.SemaphoreSlim.Wait(Int32, System.Threading.CancellationToken)$##60020BC+0x188
10 000000be`0923e9a0 00007ff9`355b6627 0x00007ff9`355b6d12
11 000000be`0923ea00 00007ff9`a1e29a1f 0x00007ff9`355b6627
12 000000be`0923ea80 00007ff9`a1e29ae6 Microsoft_Extensions_Logging_Console!Microsoft.Extensions.Logging.Console.Internal.ConsoleLoggerProcessor.ProcessLogQueue()$##600004E+0x5f
13 000000be`0923eb20 00007ff9`941bb3ee Microsoft_Extensions_Logging_Console!Microsoft.Extensions.Logging.Console.Internal.ConsoleLoggerProcessor.ProcessLogQueue(System.Object)$##600004F+0x16
14 000000be`0923eb50 00007ff9`94249dc6 System_Private_CoreLib!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)$##6002181+0x6e
15 000000be`0923ebc0 00007ff9`941bb3ee System_Private_CoreLib!System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef)$##6002297+0x1a6
16 000000be`0923ec60 00007ff9`948c35d3 System_Private_CoreLib!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object)$##6002181+0x6em.Object)$##6002181+0x6e
(...)
知道这一点,我在我的应用程序中注释了 ILogger的所有实例,以及甚至远程连接到自定义日志记录的所有内容(即使用Log
方法)。此外,我删除了所有Log<>
次注入我的课程。这没有用。
之后我将日志配置更改为:
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Error",
"System": "Error",
"Microsoft": "Error"
}
}
这也没有帮助,因此在绝望中我从Startup.cs
删除了任何记录的概念 - 删除loggerFactory.AddNLog()
,app.AddNLogWeb()
等等。不幸的是,这并没有解决我的问题。
答案 0 :(得分:0)
问题是由于我在启动时将IServiceCollection
注入服务集合(services.AddSingleton(x => services);
)而导致创建多个数据库连接,从而导致后台日志记录。