最近我有一个问题使Log4Net工作(described here)但在那之后它没关系.
我已经离开了这一段时间,因为我需要开发一些模块,我让日志记录稍微落后了.现在,我看,我甚至尝试更改日志文件的名称和位置(静态设置),它创建它,但在两种情况下都没有写任何东西.
这是我的log4Net配置文件:
<?xml version="1.0"?>
<configuration>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<appender name="file" type="log4net.Appender.RollingFileAppender">
<file value="ApplicationLogging.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="5" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %level %logger - %message%newline" />
</layout>
</appender>
</log4net>
</configuration>
这是我的Global.asax
[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
XmlConfigurator.Configure();
ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
logger.Info("Application started.");
我是如何声明的:
readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
我有时会像这样使用它:
logger.Info("some logging here");
或者对于Context记录,我会像这样使用它:
context.Database.Log = (dbLog => logger.Debug(dbLog));
该文件已创建,但未向其写入任何内容.
任何人都可以建议我在哪里或寻找什么?
更新:
正如stuartd所建议的那样,我在web.config中添加了这个:
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
Which writes the following content (pastebin)
请注意,我删除了之前没有看过的第一部分,我认为它是多余的?
<!--<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>-->
无论是否使用它都不起作用.
Here is the output第一部分未注释掉(原始状态)
我也尝试了以下内容:
https://logging.apache.org/log4net/release/config-examples.html
https://csharp.today/log4net-tutorial-great-library-for-logging/
我不知道为什么它可以创建它但不写入它…
我似乎无法在网上找到任何内容,所有问题都与文件的创建有关,而不是写入文件.
解决方法:
1用于在您的问题中包含调试/跟踪日志.
消息log4net:配置存储库[log4net-default-repository]在此日志中多次出现,看起来配置正在设置两次,一次是通过XmlConfiguratorAttribute,另一次是通过调用XmlConfigurator.Configure();.
检查XmlConfiguratorAttribute的源代码显示它在内部对XmlConfigurator.Configure(…)进行类似的调用;
private void ConfigureFromFile(ILoggerRepository targetRepository, FileInfo configFile)
{
if (m_configureAndWatch)
{
XmlConfigurator.ConfigureAndWatch(targetRepository, configFile);
}
else
{
XmlConfigurator.Configure(targetRepository, configFile);
}
}
这就是发生的事情.
XmlConfiguratorAttribute最初设置log4net.config文件中定义的记录器和追加器,并创建空的ApplicationLogging.log文件.
然后调用XmlConfigurator.Configure();使用web.config(作为默认位置)中的配置覆盖这些记录器和appender,因为您使用单独的log4net.config文件,所以不包含任何内容.
因此,您最终没有任何Appender,也没有任何记录.
解决方案是应用XmlConfiguratorAttribute或使用log4net.configfile(XmlConfigurator.Configure(new FileInfo(“log4net.config”)))的路径调用XmlConfigurator.Configure(),但不要同时执行这两个操作.