ASP.NET Core使用log4net記錄日志


 

  .NET常用的日志組件有NLog、Log4net等,.NET CORE下微軟也自帶了日志組件,到目前為止還沒用過,而我本人常用的是log4net,下面簡單講講.NET CORE下怎么使用log4net記錄日志。

  新建一個ASP.NET CORE項目,為項目添加log4net程序包,

  

 

  並添加log4net.config文件,

  

 log4net.config文件配置如下:(log4net的具體配置我就不講了,博客園里很多)

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- This section contains the log4net configuration settings -->
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log/" />
      <appendToFile value="true" />
      <rollingStyle value="Composite" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd'.log'" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="50MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date  [%thread]  %-5level  %message%newline" />
      </layout>
    </appender>
    
    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>

  </log4net>
</configuration>

  接下來編寫一個記錄日志的公共類代碼如下:(本人看到有些開發者將ILog對象直接返回,在調用的時候直接調用ILog對象的方法,這樣會造成調用的類庫中都必須引用log4net類庫,很麻煩,像如下封裝后調用的地方只需要引用Logger類所在類庫即可)

public class Logger
    {
        private static ILog logger;
        static Logger()
        {
            if (logger == null)
            {
                var repository = LogManager.CreateRepository("NETCoreRepository");
                //log4net從log4net.config文件中讀取配置信息
                XmlConfigurator.Configure(repository, new FileInfo("log4net.config"));
                logger = LogManager.GetLogger(repository.Name, "InfoLogger");
            }
        }

        /// <summary>
        /// 普通日志
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        public static void Info(string message, Exception exception = null)
        {
            if (exception == null)
                logger.Info(message);
            else
                logger.Info(message, exception);
        }

        /// <summary>
        /// 告警日志
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        public static void Warn(string message, Exception exception = null)
        {
            if (exception == null)
                logger.Warn(message);
            else
                logger.Warn(message, exception);
        }

        /// <summary>
        /// 錯誤日志
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        public static void Error(string message, Exception exception = null)
        {
            if (exception == null)
                logger.Error(message);
            else
                logger.Error(message, exception);
        }
    }

  接下來就是在任意控制器或者類中使用剛編寫的Logger類來記錄日志到文件中

        [HttpPost("list")]
        public async Task<IActionResult> CarList()
        {
            var msg = await service.GetCarList(Request);
            Logger.Info(JsonConvert.SerializeObject(msg));//此處調用日志記錄函數記錄日志
            return Json(msg);
        }

  記錄的日志在Log文件目錄中:

打開文件查看日志內容如下所示:

 

 如果需要限制歷史日志文件保存最大數量,請將<rollingStyle value="Composite" />改為:<rollingStyle value="Size" />,此時,maxSizeRollBackups配置才會生效。

修改后的log4net.config內容如下:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <!-- This section contains the log4net configuration settings -->
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log/" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd'.log'" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="50MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date  [%thread]  %-5level  %message%newline" />
      </layout>
    </appender>
    
    <!-- Setup the root category, add the appenders and set the default level -->
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>

  </log4net>
</configuration>

 

注意,如果Logger類中拋出FileNotFoundException異常,說明目錄下未找到log4net.config文件,這時請在項目log4net.config文件上右鍵——屬性——將“復制到輸出目錄”項的值改為“始終復制”即可。


免責聲明!

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



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