提问人:Jayden 提问时间:7/17/2023 更新时间:7/17/2023 访问量:369
为什么我的带有 Log4Net 和 Extensions.Logging 的 .Net 7 控制台应用程序没有输出 LogDebug(),即使 Level 设置为 DEBUG
Why is my .Net 7 Console App with Log4Net and Extensions.Logging not outputting on LogDebug() even with Level set to DEBUG
问:
我似乎无法在 .Net 7 控制台应用程序中使用 Log4Net 和 Microsoft.Extensions.Logging.Log4Net.AspNetCore 进行编写。我确信我正在将文件中的“level”元素正确设置为“DEBUG”。我可以将级别更改为“WARN”,这会按预期省略信息消息。如果更改为“DEBUG”或“ALL”,则不会将调试消息写出到控制台或文件。ILogger.LogDebug()
log4net.config
问题与此处描述的类似:即使调试级别设置为 true,也不会显示 log4net 调试日志,但我没有覆盖任何其他配置文件中的设置(通过 Log4Net 调试的输出确认)。
使用的扩展和版本
Log4Net : 2.0.15
Microsoft.Extensions.Logging: 7.0.0
Micorosft.Extensions.Logging.Console : 7.0.0
Microsoft.Extensions.Logging.Log4Net.AspNetCore : 6.1.0
设置program.cs
var builder = Host.CreateApplicationBuilder();
...
builder.Logging.ClearProviders();
var loggingOptions = new Log4NetProviderOptions()
{
Watch = false,
Log4NetConfigFileName = Path.Combine(AppContext.BaseDirectory, "log4net.config")
};
builder.Logging.AddLog4Net(loggingOptions);
Log4Net 配置代码段
<root>
<level value = "DEBUG" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
在注入了 ILogger 的类中:
_logger.LogCritical("Critial message");
_logger.LogDebug("Debug message");
_logger.LogError("Error message");
_logger.LogInformation("Information message");
_logger.LogTrace("Trace message");
_logger.LogWarning("Warning message");
输出
2023-07-17 08:04:22,325 [1] FATAL myapp.console.Verbs.TestVerb - Critical message
2023-07-17 08:04:22,381 [1] ERROR myapp.console.Verbs.TestVerb - Error message
2023-07-17 08:04:22,383 [1] INFO myapp.console.Verbs.TestVerb - Information message
2023-07-17 08:04:22,399 [1] WARN myapp.console.Verbs.TestVerb - Warning message
Log4Net 调试代码段
log4net: log4net assembly [log4net, Version=2.0.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a].
log4net: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository for assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=6.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d]
log4net: Assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=6.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d] Loaded From [C:\git\myapp\myapp.console\bin\Debug\net7.0\win-x64\Microsoft.Extensions.Logging.Log4Net.AspNetCore.dll]
log4net: Assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=6.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d] does not have a RepositoryAttribute specified.
log4net: Assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=6.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
...
log4net: Logger [root] Level string is [DEBUG].
log4net: Logger [root] level set to [name="DEBUG",value=30000].
...
log4net: Opening file for writing [C:\ProgramData\myapp\log.txt] append [True]
log4net: Created Appender [file]
log4net: Adding appender named [file] to logger [root].
我可以通过更改为 WARN 来更改日志级别,例如:
<root>
<level value = "WARN" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
现在按预期省略了“信息”级别。
2023-07-17 08:18:43,480 [1] FATAL myapp.console.Verbs.TestVerb - Critial message
2023-07-17 08:18:43,522 [1] ERROR myapp.console.Verbs.TestVerb - Error message
2023-07-17 08:18:43,525 [1] WARN myapp.console.Verbs.TestVerb - Warning message
答:
0赞
Jayden
7/17/2023
#1
事实证明,通过添加:
builder.Logging.SetMinimumLevel(LogLevel.Debug);
紧挨着这条线解决了问题。builder.Logging.AddLog4Net(loggingOptions)
我从 log4net 的 https://github.com/huorswords/Microsoft.Extensions.Logging.Log4Net.AspNetCore/issues/70 链接中得到了这个线索,即使调试级别设置为 true,也不会显示调试日志,这给了我更多配置可以尝试。
评论