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

In Log4Net all specified log folders are created but logging is not working for File Appender

我正在将 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文件夹中的所有文件。

我当然使用了你的相同配置,稍作修改你可以试试

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

这是我的切入点:

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>

你可以注意到我有 added Console appender 来检查日志是否正常工作正如在检查日志文件之前在控制台上预期的那样。

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

我所做的更改是,添加了一个 root 级别元素,如上面的配置片段中所粘贴的那样。 您需要有一个根部分来存放您的顶级记录器引用。这些是从基本记录器 (root) 继承信息的记录器。

我已经删除了您使用的附加记录器。

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

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

如果您对此有把握,请使用它。

开始使用 log4net 的好教程是 here

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