Dim*_*tri 5 c# log4net log4net-configuration audit-logging entity-framework-6
最近我有一个问题使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>
Run Code Online (Sandbox Code Playgroud)
这是我的Global.asax
[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
XmlConfigurator.Configure();
ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
logger.Info("Application started.");
Run Code Online (Sandbox Code Playgroud)
我是如何声明的:
readonly ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)
我有时会像这样使用它:
logger.Info("some logging here");
Run Code Online (Sandbox Code Playgroud)
或者对于Context记录,我会像这样使用它:
context.Database.Log = (dbLog => logger.Debug(dbLog));
Run Code Online (Sandbox Code Playgroud)
该文件已创建,但未向其写入任何内容. 任何人都可以建议我在哪里或寻找什么?
更新: 正如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>
Run Code Online (Sandbox Code Playgroud)
请注意,我删除了之前没有看过的第一部分,我认为它是多余的?
<!--<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>-->
Run Code Online (Sandbox Code Playgroud)
无论是否使用它都不起作用.
这是输出,第一部分未注释掉(处于原始状态)
我也尝试了以下内容:https : //logging.apache.org/log4net/release/config-examples.html https://csharp.today/log4net-tutorial-great-library-for-logging/
我不知道为什么它可以创建它但不写入它...我似乎无法在网上找到任何东西,所有问题都与文件的创建有关,而不是写入文件.
+1 在您的问题中包含调试/跟踪日志。
该消息 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);
}
}
Run Code Online (Sandbox Code Playgroud)
这就是发生的事情。
最初按照文件XmlConfiguratorAttribute中的定义设置记录器和附加器log4net.config,并创建空ApplicationLogging.log文件。
然后,调用将使用(默认位置XmlConfigurator.Configure();)中的配置覆盖这些记录器和附加器,因为您使用的是单独的文件,所以不包含任何配置。
因此,您最终会没有任何,并且不会记录任何内容。web.configlog4net.configAppender
解决方案是使用文件路径( ) 进行应用XmlConfiguratorAttribute或调用XmlConfigurator.Configure(),但不要同时执行这两种操作。log4net.configXmlConfigurator.Configure(new FileInfo("log4net.config"))
| 归档时间: |
|
| 查看次数: |
516 次 |
| 最近记录: |