我正在努力使用log4net注销任何内容。我尝试过使用各种来源的代码,但仍然没有快乐。有人可以帮我找出原因吗?
Assembly.cs
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
MyClass.cs
private static readonly ILog log = LogManager.GetLogger(typeof(MyClass));
log.Info("Complete: "+result); // used when my "task" completes, is always called
log4net.config
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<header value="[Your Header text here]" />
<footer value="[Your Footer text here]" />
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] <%property{auth}> - %message%newline" />
</layout>
</appender>
<!-- Set the default logging level and add the active appenders -->
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
有一点需要注意的是,这一切都只涉及一个项目。运行此程序的程序位于不同的项目中,但所有日志记录都在此程序集中完成。
答案 0 :(得分:1)
您可以启用log4net的内部调试输出,以追踪它未记录的原因。
有关详细信息,请参阅this answer。
答案 1 :(得分:1)
您是否在Web.config或App.config中为配置添加了log4net部分?
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
</configuration>
答案 2 :(得分:0)
log4net documentation for assembly attributes说:
因此,如果使用配置属性,则必须调用log4net 允许它读取属性。一个简单的电话 LogManager.GetLogger将导致调用程序集上的属性 被阅读和处理。 因此必须进行日志记录 在应用程序启动期间尽早调用,以及 当然,在加载和调用任何外部程序集之前。
您的日志记录已经在外部程序集中。使用程序集属性时这是一个问题,我建议您在启动代码中使用XmlConfigurator.ConfigureAndWatch(…)
。