asp.net webapi 解决log4net自动生成空文件的问题

.net framework 集成log4net,以每日生成日志文件,运行一段时间后发现他会自动生成空文件, 自己想要的效果是只有输入了日志时,才自动创建文件。

1- 首先nuget引用 log4net

2- web.config 配置log4net

<configuration>
  <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />       
  </configSections>
  <log4net>  
    <logger name="LogInfo">
      <level value="ALL" />
      <appender-ref ref="FileAppender" />
    </logger>
       
    <appender name="FileAppender" type="YourNameSpace.MyFileAppender">   <!--YourNameSpace:你自己类的命令空间 -->
      <file value="Log/" /> <!--生成的文件夹在Log文件夹下(相对路径) -->
      <preserveLogFileNameExtension value="true" /> 
      <maxSizeRollBackups value="10" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" />
      <staticLogFileName value="false" />  
      
      <layout type="log4net.Layout.PatternLayout,log4net">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />
      </layout>
    </appender>
  </log4net>
</configuration>

3- 自定义MyFileAppender类 重写基类的OpenFile方法

namespace YourNameSpace
{
    public class MyFileAppender : log4net.Appender.RollingFileAppender
    {
        private bool isFirstTime = true;

        protected override void OpenFile(string fileName, bool append)
        {
            if (isFirstTime)
            {
                isFirstTime = false;
                return;
            }

            base.OpenFile(fileName, append);
        }
    }
}

4- Global.asax.cs

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {   
        //log4net配置
        log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("~/Web.config")));

        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

5-定义LogHelper类

public class LogHelper
{
    private static readonly log4net.ILog log = log4net.LogManager.GetLogger("LogInfo");

    public static void WriteInfo(string msg)
    {
        log.Info(msg);
    }
}

OK....

原文地址:https://www.cnblogs.com/stephenzengx/p/14048999.html