我在 outputTemplate 中有一个 ThreadId,但日志始终将其记录为 1。我有多个应用程序实例同时运行到同一个日志中,因此希望我可以根据 ThreadId 分离实例。
谁能建议如何解决这个问题?ThreadName 在应用程序设置一些内容并识别其运行的区域后分配,因此不是最好的分隔符。此外,一个区域中可以同时运行多个功能。因此需要 ThreadId
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(builder.Build())
.Enrich.FromLogContext()
.Enrich.WithThreadId()
.Enrich.WithThreadName()
.WriteTo.Console(outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] <{ThreadName}> <{ThreadId}> {Message:lj}{NewLine}{Exception}")
.WriteTo.File(@".\log\log.txt",
rollingInterval: RollingInterval.Day,
shared: true,
outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] <{ThreadName}> <{ThreadId}> {Message:lj}{NewLine}{Exception}")
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
日志输出
2021-04-09 06:30:09.059 [INF] <blackstone> <1> Action : Task A
2021-04-09 06:30:09.059 [INF] <wavell> <1> Action : Task A
2021-04-09 06:30:09.060 [INF] <forest> <1> Action : Task A
2021-04-09 06:30:09.130 [INF] <wavell> <1> Loading CentreDetails
2021-04-09 06:30:09.130 [INF] <forest> <1> Loading CentreDetails …Run Code Online (Sandbox Code Playgroud) 我创建了一个 C# .net5.0 控制台应用程序,在测试期间 Serilog 一直正常工作,记录到控制台和文件(同一文件夹;path=“log.txt”)。但是,当我在服务器上的应用程序上运行时,控制台和文件日志记录接收器都不起作用!我现在认为问题不在于接收器本身,而是 Serilog 实际上没有工作。
我尝试启用自我日志:
Serilog.Debugging.SelfLog.Enable(msg =>
Console.WriteLine(msg)
);
Run Code Online (Sandbox Code Playgroud)
但即使在我的开发环境中的调试器中运行,Console.WriteLine(msg)行也永远不会被调用!
我appsettings.json的如下:
{
"Serilog": {
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information",
"System": "Information"
}
},
"WriteTo": [
{
"Name": "Console",
"Args": {
"theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj} {NewLine}{Exception}"
}
},
{
"Name": "File",
"Args": {
"path": "log.txt",
"rollingInterval": "Infinite",
"outputTemplate": "{Timestamp:HH:mm:ss.fff} [{Level:u3}] {Message:lj}{NewLine}{Exception}",
"shared": false
}
}
],
"Enrich": [ "FromLogContext" ]
},
"Database": {
"Server": "(local)",
"Database": "ActivbaseLive" …Run Code Online (Sandbox Code Playgroud) 我有一个具有多个线程的 .Net Worker Service 应用程序。我想将每个线程记录到单独的文件中,以便更轻松地阅读日志。有什么想法来实现这个吗?