【发布时间】:2020-08-02 20:30:13
【问题描述】:
我有一个 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 信息 Microsoft.Hosting.Lifetime.? [?] - 消息:应用程序已启动。按 Ctrl+C 关闭。
2020-10-18 16:27:59,065 信息 Microsoft.Hosting.Lifetime.? [?] - 消息:托管环境:开发
2020-10-18 16:27:59,066 信息 Microsoft.Hosting.Lifetime.? [?] - 消息:内容根路径:
...但是我没有得到任何其他东西。
为了检查所有设置是否正确,我在 Onget() 方法中添加了以下几行...
ILoggerRepository repository = log4net.LogManager.GetAllRepositories().FirstOrDefault();
RollingFileAppender appender = repository.GetAppenders().OfType<RollingFileAppender>().FirstOrDefault();
string logFile = appender.File;
在运行时,logFile 变量被正确设置为预期日志文件的路径,所以看起来它已经初始化好了。
我尝试使用老式的根并按如下方式更新记录器的实例...
log4NetLogger = LogManager.GetLogger(typeof(IndexModel));
...效果很好。
所以,我可以记录,但只能通过手动创建记录器,而不是通过注入。
有人知道我在这里做错了什么吗?谢谢
更新刚刚了解了如何调试 log4net,我在 Startupcs 的 ConfigureServices 方法中添加了以下行...
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
不确定这是否有帮助,因为它似乎没有显示任何错误。路径正确,指向写入的日志文件。
【问题讨论】:
标签: asp.net-core dependency-injection log4net