【发布时间】:2019-05-05 23:56:21
【问题描述】:
最近我在使 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.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/
我不知道为什么它可以创建它但不能写入它...... 我似乎在网上也找不到任何东西,所有问题都与文件的创建有关,而不是写入文件。
【问题讨论】:
-
是否登录到控制台?
-
不,不是因为我没有任何控制台,它是一个 MVC Web 应用程序。
-
那么为什么你有一个控制台附加程序?为什么你的 log4net 配置文件中有
<system.web>部分?无论如何,我建议你 turn on log4net internal logging 看看它报告了什么。 -
我不知道这是否与您的问题有关,但您将 RollingFile 属性设置为 size 意味着您希望在旧文件变重时拥有新文件。 This 行
<staticLogFileName value="true" />表示只有一个文件将用于日志记录。即使它没有导致此问题,这可能会让您稍后感到头疼。 -
奇怪的是在调试/跟踪日志中多次看到
configuring repository [log4net-default-repository];好像您要配置两次。你能删除XmlConfigurator.Configure();。还要添加<param name="ImmediateFlush" value="true" />以确保立即刷新内部缓冲区。
标签: c# entity-framework-6 log4net log4net-configuration audit-logging