log4net 记录器未将我的日志写入文件,但已写入 ASP.NET 日志消息
log4net logger not writing my logs to file, but ASP.NET log messages are written
我有一个 ASP.NET Core 3.1 Razor 页面网站,我正在尝试向其添加 log4net,但无法使日志记录正常工作。我已经引用了 Microsoft.Extensions.Logging.Log4Net.AspNetCore
Nuget 包和相关的依赖项。
我添加了一个 log4net.config 文件...
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="RollingFileAppender"
type="log4net.Appender.RollingFileAppender">
<param name="File"
value="MyWebSite.log" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-7level %logger - %message%newline%exception" />
</layout>
</appender>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
我把Program.cs改成了这样...
public class Program {
public static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
}).ConfigureLogging(builder => {
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddLog4Net("log4net.config");
});
}
我试过在网站首页使用这个,如下...
public class IndexModel : PageModel {
private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger) {
_logger = logger;
}
public void OnGet() {
_logger.LogDebug("Home page loading");
}
}
但是,日志文件没有包含我添加的消息。
我可以看到日志记录在一定程度上起作用,因为日志文件已创建,前三行是...
2020-10-18 16:27:59,052 INFO Microsoft.Hosting.Lifetime.? [?] - MESSAGE: Application started. Press Ctrl+C to shut down.
2020-10-18 16:27:59,065 INFO Microsoft.Hosting.Lifetime.? [?] - MESSAGE: Hosting environment: Development
2020-10-18 16:27:59,066 INFO Microsoft.Hosting.Lifetime.? [?] - MESSAGE: Content root path:
...但是我什么也没得到。
为了检查所有设置是否正确,我在 Onget()
方法中添加了以下行...
ILoggerRepository repository = log4net.LogManager.GetAllRepositories().FirstOrDefault();
RollingFileAppender appender = repository.GetAppenders().OfType<RollingFileAppender>().FirstOrDefault();
string logFile = appender.File;
在 运行 时,logFile
变量已正确设置为预期日志文件的路径,因此看起来它已正确初始化。
我尝试使用老式的 root 并按如下方式更新记录器实例...
log4NetLogger = LogManager.GetLogger(typeof(IndexModel));
...这工作正常。
所以,我可以记录,但只能通过手动创建记录器,而不是通过注入。
有人知道我做错了什么吗?谢谢
Update 刚刚发现如何调试 log4net,我在 ConfigureServices
方法中添加了以下行 Startupcs
...
log4net.Util.LogLog.InternalDebugging = true;
这导致以下内容被发送到输出面板...
log4net: log4net assembly [log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a]. (.NET Framework [.NET Core 3.1.4] on Microsoft Windows 10.0.18363)
log4net: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository for assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=3.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d]
log4net: Assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=3.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d] Loaded From [Not supported on .NET Core]
log4net: Assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=3.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d] does not have a RepositoryAttribute specified.
log4net: Assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=3.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy]
log4net: configuring repository [log4net-default-repository] using XML element
log4net: Configuring Repository [log4net-default-repository]
log4net: Configuration update mode [Merge].
log4net: Logger [root] Level string is [DEBUG].
log4net: Logger [root] level set to [name="DEBUG",value=30000].
log4net: Loading Appender [RollingFileAppender] type: [log4net.Appender.RollingFileAppender]
log4net: Setting Property [File] to String value [MyWebSite.log]
log4net: Setting Property [AppendToFile] to Boolean value [True]
log4net: Setting Property [LockingModel] to object [log4net.Appender.FileAppender+MinimalLock]
log4net: Setting Property [RollingStyle] to RollingMode value [Size]
log4net: Setting Property [MaxSizeRollBackups] to Int32 value [2]
log4net: Setting Property [MaximumFileSize] to String value [5MB]
log4net: Setting Property [StaticLogFileName] to Boolean value [True]
log4net: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Setting Property [ConversionPattern] to String value [%date [%thread] %-7level %logger - %message%newline%exception]
log4net: Converter [date] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [literal] Option [ [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [thread] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [literal] Option [] ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [level] Option [] Format [min=7,max=2147483647,leftAlign=True]
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [logger] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [literal] Option [ - ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [exception] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Setting Property [Layout] to object [log4net.Layout.PatternLayout]
log4net: Searched for existing files in [PATHTOPROJECT]
log4net: curSizeRollBackups starts at [0]
log4net: Opening file for writing [PATHTOPROJECT\MyWebSite.log] append [True]
log4net: Created Appender [RollingFileAppender]
log4net: Adding appender named [RollingFileAppender] to logger [root].
log4net: Hierarchy Threshold []
Microsoft.Hosting.Lifetime: Information: Application started. Press Ctrl+C to shut down.
Microsoft.Hosting.Lifetime: Information: Hosting environment: Development
Microsoft.Hosting.Lifetime: Information: Content root path: PATHTOPROJECT
不确定这是否有帮助,因为它似乎没有显示任何错误。路径正确,指向写入的日志文件。
您是否已将 appSettings.json 中设置的默认日志记录级别更改为“调试”?如果将其设置为“信息”,则不会显示调试日志消息。
我有一个 ASP.NET Core 3.1 Razor 页面网站,我正在尝试向其添加 log4net,但无法使日志记录正常工作。我已经引用了 Microsoft.Extensions.Logging.Log4Net.AspNetCore
Nuget 包和相关的依赖项。
我添加了一个 log4net.config 文件...
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="RollingFileAppender"
type="log4net.Appender.RollingFileAppender">
<param name="File"
value="MyWebSite.log" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="5MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-7level %logger - %message%newline%exception" />
</layout>
</appender>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
我把Program.cs改成了这样...
public class Program {
public static void Main(string[] args) =>
CreateHostBuilder(args).Build().Run();
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup<Startup>();
}).ConfigureLogging(builder => {
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddLog4Net("log4net.config");
});
}
我试过在网站首页使用这个,如下...
public class IndexModel : PageModel {
private readonly ILogger<IndexModel> _logger;
public IndexModel(ILogger<IndexModel> logger) {
_logger = logger;
}
public void OnGet() {
_logger.LogDebug("Home page loading");
}
}
但是,日志文件没有包含我添加的消息。
我可以看到日志记录在一定程度上起作用,因为日志文件已创建,前三行是...
2020-10-18 16:27:59,052 INFO Microsoft.Hosting.Lifetime.? [?] - MESSAGE: Application started. Press Ctrl+C to shut down.
2020-10-18 16:27:59,065 INFO Microsoft.Hosting.Lifetime.? [?] - MESSAGE: Hosting environment: Development
2020-10-18 16:27:59,066 INFO Microsoft.Hosting.Lifetime.? [?] - MESSAGE: Content root path:
...但是我什么也没得到。
为了检查所有设置是否正确,我在 Onget()
方法中添加了以下行...
ILoggerRepository repository = log4net.LogManager.GetAllRepositories().FirstOrDefault();
RollingFileAppender appender = repository.GetAppenders().OfType<RollingFileAppender>().FirstOrDefault();
string logFile = appender.File;
在 运行 时,logFile
变量已正确设置为预期日志文件的路径,因此看起来它已正确初始化。
我尝试使用老式的 root 并按如下方式更新记录器实例...
log4NetLogger = LogManager.GetLogger(typeof(IndexModel));
...这工作正常。
所以,我可以记录,但只能通过手动创建记录器,而不是通过注入。
有人知道我做错了什么吗?谢谢
Update 刚刚发现如何调试 log4net,我在 ConfigureServices
方法中添加了以下行 Startupcs
...
log4net.Util.LogLog.InternalDebugging = true;
这导致以下内容被发送到输出面板...
log4net: log4net assembly [log4net, Version=2.0.8.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a]. (.NET Framework [.NET Core 3.1.4] on Microsoft Windows 10.0.18363)
log4net: defaultRepositoryType [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository for assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=3.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d]
log4net: Assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=3.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d] Loaded From [Not supported on .NET Core]
log4net: Assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=3.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d] does not have a RepositoryAttribute specified.
log4net: Assembly [Microsoft.Extensions.Logging.Log4Net.AspNetCore, Version=3.1.0.0, Culture=neutral, PublicKeyToken=5d1104efbd0e675d] using repository [log4net-default-repository] and repository type [log4net.Repository.Hierarchy.Hierarchy]
log4net: Creating repository [log4net-default-repository] using type [log4net.Repository.Hierarchy.Hierarchy]
log4net: configuring repository [log4net-default-repository] using XML element
log4net: Configuring Repository [log4net-default-repository]
log4net: Configuration update mode [Merge].
log4net: Logger [root] Level string is [DEBUG].
log4net: Logger [root] level set to [name="DEBUG",value=30000].
log4net: Loading Appender [RollingFileAppender] type: [log4net.Appender.RollingFileAppender]
log4net: Setting Property [File] to String value [MyWebSite.log]
log4net: Setting Property [AppendToFile] to Boolean value [True]
log4net: Setting Property [LockingModel] to object [log4net.Appender.FileAppender+MinimalLock]
log4net: Setting Property [RollingStyle] to RollingMode value [Size]
log4net: Setting Property [MaxSizeRollBackups] to Int32 value [2]
log4net: Setting Property [MaximumFileSize] to String value [5MB]
log4net: Setting Property [StaticLogFileName] to Boolean value [True]
log4net: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Setting Property [ConversionPattern] to String value [%date [%thread] %-7level %logger - %message%newline%exception]
log4net: Converter [date] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [literal] Option [ [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [thread] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [literal] Option [] ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [level] Option [] Format [min=7,max=2147483647,leftAlign=True]
log4net: Converter [literal] Option [ ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [logger] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [literal] Option [ - ] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [message] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [newline] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Converter [exception] Option [] Format [min=-1,max=2147483647,leftAlign=False]
log4net: Setting Property [Layout] to object [log4net.Layout.PatternLayout]
log4net: Searched for existing files in [PATHTOPROJECT]
log4net: curSizeRollBackups starts at [0]
log4net: Opening file for writing [PATHTOPROJECT\MyWebSite.log] append [True]
log4net: Created Appender [RollingFileAppender]
log4net: Adding appender named [RollingFileAppender] to logger [root].
log4net: Hierarchy Threshold []
Microsoft.Hosting.Lifetime: Information: Application started. Press Ctrl+C to shut down.
Microsoft.Hosting.Lifetime: Information: Hosting environment: Development
Microsoft.Hosting.Lifetime: Information: Content root path: PATHTOPROJECT
不确定这是否有帮助,因为它似乎没有显示任何错误。路径正确,指向写入的日志文件。
您是否已将 appSettings.json 中设置的默认日志记录级别更改为“调试”?如果将其设置为“信息”,则不会显示调试日志消息。