在Log4Net中,创建了所有指定的日志文件夹,但日志记录对File Appender不起作用

时间:2018-05-19 13:54:33

标签: c# log4net-configuration rollingfileappender fileappender log4

我使用Castle和Log4Net。所有文件夹都已创建,但日志信息未写入文本文件。

这是配置;

<add key="log4net.Internal.Debug" value="true"/>
<add key="log4net.Internal.Error" value="true"/>
<add key="log4net.Internal.Info" value="true"/>
<add key="log4net.Internal.Fatal" value="true"/>
<add key="log4net.Internal.Warn" value="true"/>


<appender name="debugAppender" type="log4net.Appender.RollingFileAppender,log4net">
  <filter type="log4net.Filter.LevelMatchFilter">
    <levelToMatch value="DEBUG" />
  </filter>
  <filter type="log4net.Filter.DenyAllFilter" />
  <file value="..\\..\\LOGS\\DEBUG\\" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <DatePattern value="yyyy\\\\MM\\\\dd\\\\yyyyMMdd'_debug.txt'" />
  <maxSizeRollBackups value="-1" />
  <maximumFileSize value="50MB" />
  <countDirection value="1" />
  <preserveLogFileNameExtension value="true" />
  <encoding value="utf-8" />
  <!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->
  <layout type="log4net.Layout.PatternLayout,log4net">
    <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
  </layout>
</appender>`

<logger name="Log">
  <appender-ref ref="errorAppender" />
  <appender-ref ref="infoAppender" />
  <appender-ref ref="debugAppender" />
  <appender-ref ref="warningAppender" />
  <appender-ref ref="fatalAppender" />
</logger>`

我正在使用控制台应用程序,Main方法将像这样开始;

        XmlConfigurator.Configure(new FileInfo("log4net.config"));

每个人都有权编写,阅读LOGS文件夹中的所有文件。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我使用了相同的配置,只需稍加修改即可尝试

我创建了一个控制台应用程序:

这是我的切入点:

public class Program
    {
        private static readonly log4net.ILog log
      = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
        static void Main(string[] args)
        {
            XmlConfigurator.Configure(new FileInfo("..\\..\\log4net.config"));
            log.Debug("Hi this is DEBUG from logging");
            log.Info("This is information from logger");
            log.Error("This is Error from logger");
            Console.ReadLine();

        }
    }

以下是我使用的配置:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  <section name="log4net"

     type="log4net.Config.Log4NetConfigurationSectionHandler, 
            log4net"/>
    </configSections>
  <log4net>
      <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender,log4net">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{ABSOLUTE} 
    [%thread] %level %logger - %message%newline"/>
      </layout>
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="DEBUG" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
    </appender>
    <appender name="debugAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <filter type="log4net.Filter.LevelMatchFilter">
        <levelToMatch value="DEBUG" />
      </filter>
      <filter type="log4net.Filter.DenyAllFilter" />
      <file value="..\\..\\LOGS\\DEBUG\\" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <staticLogFileName value="false" />
      <DatePattern value="yyyy\\\\MM\\\\dd\\\\yyyyMMdd'_debug.txt'" />
      <maxSizeRollBackups value="-1" />
      <maximumFileSize value="50MB" />
      <countDirection value="1" />
      <preserveLogFileNameExtension value="true" />
      <encoding value="utf-8" />
      <!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />-->
      <layout type="log4net.Layout.PatternLayout,log4net">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
    </appender>
      <root>
      <level value="DEBUG" />
      <appender-ref ref="ConsoleAppender" />
      <!--<appender-ref ref="DebugOutputAppender" />-->
      <appender-ref ref="debugAppender" />
    </root>
   </log4net>
</configuration>

您可以注意到我已经 添加了 控制台 appender,以便在检查日志文件之前检查日志记录是否在控制台上正常工作。

注意:使用与您相同的配置,我无法在控制台和文件中记录任何信息,尽管文件夹和文件的创建没有任何问题。

我所做的更改是在上面的配置代码段中添加了一个 root 级别元素。 您需要有一个根节来容纳顶级记录器引用。这些是从基本记录器(root)继承信息的记录器。

我已经 删除了 您使用过的其他记录器。

有时您会想要了解有关应用程序特定部分的更多信息。 log4net通过允许您指定除根记录器之外的其他记录器引用来预期这一点。例如,这是一个额外的记录器,用于记录在 OtherClass 类对象中发生的控制台消息:

<logger name="Log4NetTest.OtherClass">
  <level value="DEBUG"/>
  <appender-ref ref="ConsoleAppender"/>
</logger>

如果您对此非常肯定,请使用它。

从log4net开始的好教程是here

如果您遇到任何问题,请告诉我。