log4net未记录到日志文件或控制台(外部log4net.config文件)

时间:2017-12-04 06:46:22

标签: c# logging log4net log4net-configuration

我在项目中创建了一个名为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>

3 个答案:

答案 0 :(得分:1)

如果在log4net日志记录配置文件中有log4net配置,则不必添加web.config的配置(配置标记和部分)。只需添加log4net标记:

<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>

答案 1 :(得分:0)

由于斯图尔德的评论,管理找出问题。我的问题是,我的完整解决方案有2个项目。我只为log4net配置了一个项目(不是启动项目)。

我原来的log4net配置没有任何错误。我只是将log4net引用添加到我的启动项目中,并将log4net配置添加到该项目中,并开始记录。

非常感谢所有测试我的配置的人。

答案 2 :(得分:-1)

我无法重现你的错误。在AssemblyInfo中配置log4net工作正常。可能是配置问题。让我告诉你另一个实现

    private static readonly ILog log = LogManager.GetLogger("myLogger");
    private static string configFile = "log4net.config";
    static Logger()
    {
        XmlConfigurator.Configure(new FileInfo(configFile));
    }

log4net.config:

<log4net>
<logger name="myLogger">
  <level value="ALL" />
  <appender-ref ref="console" />
  <appender-ref ref="RollingFileAppender" />
</logger>
<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>