.netcore項目中使用log4net


log4net配置文件

        引入log4net包,創建一個config目錄,專門用來放配置文件,添加log4net.config文件。

        編寫配置文件。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  
  <log4net>
    <!-- 錯誤日志類-->
    <logger name="errLog">
      <level value="ALL" />
      <appender-ref ref="ErrorAppender" />
    </logger>
    <!-- 錯誤日志附加介質-->
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志文件路徑,會自動創建-->
      <param name="File" value="Log\\LogError\\" />
      <!--是否是向文件中追加日志-->
      <param name="AppendToFile" value="true" />
      <!--log備份文件最大數量,超過設置數量會滾動覆蓋之前的日志-->
      <param name="MaxSizeRollBackups" value="2" />
      <!--最大文件大小,默認10MB(數據類型:long)等同於maximumFileSize參數-->
      <param name="MaxFileSize" value="10485760" />
      <!--最大文件大小(KB/MB/GB)-->
      <!--<param name="MaximumFileSize" value="1MB" />-->
      <!--日志文件名是否是固定不變的-->
      <param name="StaticLogFileName" value="false" />
      <!--日志文件名格式為:2019-10-09.log-->
      <param name="DatePattern" value="yyyy-MM-dd&quot;.htm&quot;" />
      <!--日志滾動方式:混合方式(文件大小和日期)-->
      <param name="RollingStyle" value="Composite" />
      <!--異常日志布局-->
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n【異常時間】:%d [%t] &lt;BR&gt;%n【異常級別】:%-5p &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
      </layout>
    </appender>

    <!-- 信息日志 -->
    <logger name="infoLog">
      <level value="ALL" />
      <appender-ref ref="InfoAppender" />
    </logger>
    <!-- 信息日志附加介質-->
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log\\LogInfo\\" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="2" />
      <param name="MaximumFileSize" value="1024KB" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyy-MM-dd&quot;.htm&quot;" />
      <param name="RollingStyle" value="Composite" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="&lt;HR COLOR=blue&gt;%n【日志時間】:%d [%t] &lt;BR&gt;%n【日志級別】:%-5p &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
      </layout>
    </appender>
    
  </log4net>
  
</configuration>

 

 

日志幫助類

        首先創建一個倉儲類

public class Log4NetRepository
{
    public static ILoggerRepository loggerRepository { get; set; }
}
    /// <summary>
    /// log4net幫助類
    /// AdoNetAppender僅支持到.net framework4.5,不支持在.net core項目中持久化日志到數據庫
    /// </summary>
    public class LogHelper
    {
        // 異常 // 注意:logger name不要寫錯
        private static readonly ILog logerror = LogManager.GetLogger(Log4NetRepository.loggerRepository.Name, "errLog");
        // 記錄
        private static readonly ILog loginfo = LogManager.GetLogger(Log4NetRepository.loggerRepository.Name, "infoLog");

        public static void Error(string throwMsg, Exception ex)
        {
            string errorMsg = string.Format("【異常描述】:{0} <br>【異常類型】:{1} <br>【異常信息】:{2} <br>【堆棧調用】:{3}", 
                new object[] {
                    throwMsg,
                    ex.GetType().Name,
                    ex.Message,
                    ex.StackTrace });
            errorMsg = errorMsg.Replace("\r\n", "<br>");
            logerror.Error(errorMsg);
        }

        public static void Info(string message)
        {
            loginfo.Info(string.Format("【日志信息】:{0}",message));
        }

    }

        startup引用log4netlog4net.Configlog4net.Repository。在startup的構造函數中這么配置:

public static ILoggerRepository repository { get; set; }

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    // log4net 倉儲
    repository = LogManager.CreateRepository("CoreLogRepository");
    XmlConfigurator.Configure(repository, new FileInfo("config/log4net.config"));
    Log4NetRepository.loggerRepository = repository;
}

        之前寫好了全局異常捕獲,現在可以加上這么一句。

public class ApiExceptionFilter:ExceptionFilterAttribute
    {
        private IHostingEnvironment _env;
        public ApiExceptionFilter(IHostingEnvironment env)
        {
            _env = env;
        }

        public override void OnException(ExceptionContext context)
        {
            if (context.ExceptionHandled)
            {
                return;
            }
            LogHelper.Error(exMsg, context.Exception); // 日志記錄
            var exMsg = context.Exception.Message;
            ApiResp resp = new ApiResp(ApiRespCode.E999999,exMsg);
            // 開發環境顯示異常信息
            if(_env.IsDevelopment())
            {
                resp.Message = exMsg;
            }
            context.Result = new JsonResult(resp);
            context.ExceptionHandled = true;
        }
    }

  當發生異常時,會自動在項目目錄創建Log\LogError\目錄,並寫入日志文件。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM