Log4Net 正在创建文件但未写入文件
Log4Net is creating file but not writing to it
最近我在使 Log4Net 工作时遇到了问题 (),但之后一切正常。
我已经将其搁置了一段时间,因为我需要开发一些模块并且我将日志记录稍微搁置了。现在我看,我什至尝试更改日志文件的名称和位置(静态设置),它正在创建它但在这两种情况下都没有写入任何内容。
这是我的 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/
我不知道为什么它可以创建它但不能写入它......
我似乎也无法在网上找到任何东西,所有问题都与文件的创建有关,而不是写入文件。
请检查您的应用程序是否对日志文件的目标文件夹具有写入权限,
这些事情有时会导致真正的痛苦。
除此之外其他都还不错
+1 包括 debug/trace 登录您的问题。
消息 log4net: Configuring Repository [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
中的配置覆盖这些记录器和附加程序( 是默认位置 ),其中不包含任何,因为您使用的是单独的 log4net.config
文件。
因此,您最终没有任何 Appender
,也没有任何记录。
解决方案是 应用 XmlConfiguratorAttribute
或使用 log4net.config
文件的路径调用 XmlConfigurator.Configure()
(XmlConfigurator.Configure(new FileInfo("log4net.config"))
) , 但 不要两者都做 .
最近我在使 Log4Net 工作时遇到了问题 (
我已经将其搁置了一段时间,因为我需要开发一些模块并且我将日志记录稍微搁置了。现在我看,我什至尝试更改日志文件的名称和位置(静态设置),它正在创建它但在这两种情况下都没有写入任何内容。
这是我的 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/
我不知道为什么它可以创建它但不能写入它...... 我似乎也无法在网上找到任何东西,所有问题都与文件的创建有关,而不是写入文件。
请检查您的应用程序是否对日志文件的目标文件夹具有写入权限, 这些事情有时会导致真正的痛苦。
除此之外其他都还不错
+1 包括 debug/trace 登录您的问题。
消息 log4net: Configuring Repository [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
中的配置覆盖这些记录器和附加程序( 是默认位置 ),其中不包含任何,因为您使用的是单独的 log4net.config
文件。
因此,您最终没有任何 Appender
,也没有任何记录。
解决方案是 应用 XmlConfiguratorAttribute
或使用 log4net.config
文件的路径调用 XmlConfigurator.Configure()
(XmlConfigurator.Configure(new FileInfo("log4net.config"))
) , 但 不要两者都做 .