【发布时间】:2017-12-04 06:46:21
【问题描述】:
我在我的项目中创建了一个名为log4net.config的文件,并添加了以下配置:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="console" />
<appender-ref ref="RollingFileAppender" />
</root>
<appender name="console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date %level %logger - %message%newline" />
</layout>
</appender>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="${LOCALAPPDATA}\MyApp\LogFile.log" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5level [%d{yyyy-MM-dd hh:mm:ss}] [%thread] (Line:%line) %M: - %m%n" />
</layout>
</appender>
</log4net>
</configuration>
之后,我将下面的行添加到我的AssemblyInfo.cs 文件中:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
在应用程序中,我有以下静态类:
public static class Logger
{
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
public static void LogInfo(string msg)
{
log.Info(msg);
}
public static void LogDebug(string msg)
{
log.Debug(msg);
}
public static void LogWarn(string msg, Exception e)
{
log.Warn(msg, e);
}
public static void LogError(string msg, Exception e)
{
log.Error(msg, e);
}
}
然后我尝试使用Logger.LogDebug("Error logger working.");在另一个类的应用程序中的某个位置登录
但是,我看不到任何正在创建或写入的日志文件。我做错了什么?
更新:
我还在我的 app.config 文件中添加了以下内容,但我在输出控制台上什么也没看到...
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
【问题讨论】:
-
消除 ACL 问题并将 ${LOCALAPPDATA}\... 更改为 C:\TEMP\LogFile.log 并检查是否有效。
-
@lloyd 在更改后仍然无法正常工作。
-
可能会删除 log4net 并一次添加每个配置元素。
-
我试过你的 log4net.config 文件,它工作正常。您确定将 log4net.config 文件复制到您的目标文件夹吗?另外为了启用 log4net 调试,我通常只需更改 log4net.config 文件,将
<log4net>替换为<log4net debug="true"> -
Docs say ".. 值得注意的是属性纯粹是被动的。它们只是信息。因此,如果您使用配置属性,则必须调用 log4net 以允许它读取属性. 对 LogManager.GetLogger 的简单调用将导致调用程序集上的属性被读取和处理。因此,必须在应用程序启动期间尽早进行日志调用,当然在任何外部程序集已加载并调用。"
标签: c# logging log4net log4net-configuration