简体   繁体   中英

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

I'm using Castle with Log4Net. All folders were created but logging information is not written to a text file.

Here is the config:

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

I'm using console application for this, and the Main method will start like this:

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

And everyone has permission to write, read all files in LOGS folders.

I used your same configuration of course with little modification which you can try

I created a console application as yours:

Here is my Entry point:

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();

        }
    }

And here is the configuration I used:

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

You can notice I have added Console appender to check whether the logging is working as expected on the console before checking the log file.

Note : With the same configuration as yours I was not able to log any information in Console as well as file although the folder and the file were getting created without any issues.

The change I did is, added a root level element as pasted in the above configuration snippet. You need to have one root section to house your top-level logger references. These are the loggers that inherit information from your base logger (root).

I have removed the additional loggers which you have used.

Sometimes you will want to know more about a particular part of your application. log4net anticipated this by allowing you to specify additional logger references beyond just the root logger. For example, here is an additional logger to log to the console messages that occur inside the OtherClass class object:

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

Use it if you are really sure on this.

Good tutorial to start with log4net is here .

Let me know if you face any issues.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM