【问题标题】:In Log4Net all specified log folders are created but logging is not working for File Appender在 Log4Net 中创建了所有指定的日志文件夹,但日志记录不适用于 File Appender
【发布时间】:2018-05-19 13:54:32
【问题描述】:

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

【问题讨论】:

  • 尝试使用完整路径名并检查。
  • 你在哪里添加了 XmlConfigurator.Configure(new FileInfo("log4net.config"));这条线?在 Application_Start 下?
  • Varun ,此代码块在 Program.cs 的第一个代码中。对吗?
  • 可以将其添加到任何地方以便读取您的配置。如果您在 global.asax 下的应用程序启动处添加会更好
  • codeproject.com/Articles/140911/log-net-Tutorial 我发现了这个不错的 tute。我觉得对你有帮助

标签: c# log4net log4net-configuration rollingfileappender fileappender


【解决方案1】:

我当然使用了与您相同的配置,几乎没有修改,您可以尝试

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

这是我的入口点:

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>

您可以注意到我已经添加了 Console 附加程序,以在检查日志文件之前检查日志是否在控制台上按预期工作。

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

我所做的更改是,添加了一个 root 级别元素,就像粘贴在上面的配置 sn-p 中一样。 您需要有一个根部分来容纳您的顶级记录器引用。这些是从基本记录器(根)继承信息的记录器。

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

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

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

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

log4net 入门的好教程是here

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

【讨论】:

  • 从附加程序中删除 行并在根级编辑 这应该可以工作
  • 我正在使用您的配置文件,而我的应用程序是带有城堡 Windsor 的quartz.net。而quartz.net 调试日志都在txt 文件中。我不知道发生了什么。这是日志和配置文件。 [链接]ufile.io/1text
  • 还是不行??无论日志记录是否正常,您是否尝试过使用 ConsoleAppender?
  • 文件下载了吗?它写所有quartz.net日志。我不想要它,我只想写我所有的日志。这是控制台日志。 ==> Console Log
  • 取消注释 并将级别设置为关闭。
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多