C#/.net 5.0 - log4net


控制台應用程序/.net 5.0
引用包
  • log4net
log4net.config【始終復制】

說明:

  • FileAppender和RollingFileAppender都是用來將日志寫入到文本文件中。但是,RollingFileAppender提供了更多的選項,可以很方便的控制何時新建一個新的文本文件。這個還是很有必要的,想象以下,你把所有的日志都記錄到一個文本文件中,即使系統再小,日復一日,你也會有找不到日志的時候,何況,隨着文本的增大,文本的寫入與打開也會想得更加的慢,甚至出現超時。因此,主要使用RollingFileAppender寫日志.
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- Level的級別,由高到低 -->
  <!-- None > Fatal > ERROR > WARN > DEBUG > INFO > ALL-->
  <!-- 解釋:如果level是ERROR,則在cs文件里面調用log4net的info()方法,則不會寫入到日志文件中-->
  <log4net>
    <!--錯誤日志類-->
    <logger name="error">
      <!--定義記錄的日志級別-->
      <level value="ALL" />
      <!--輸出到文件-->
      <appender-ref ref="ErrorAppender" />
      <!--輸出到控制台-->
      <appender-ref ref="ConsoleAppender"/>
    </logger>
    <!--信息日志類-->
    <logger name="info">
      <level value="ALL" />
      <appender-ref ref="InfoAppender" />
      <appender-ref ref="ConsoleAppender"/>
    </logger>
    <!--調試日志類-->
    <logger name="debug">
      <level value="ALL" />
      <appender-ref ref="DebugAppender" />
      <appender-ref ref="ConsoleAppender"/>
    </logger>
    <!--錯誤日志附加介質:輸出到文件-->
    <!-- name屬性指定其名稱,type則是log4net.Appender命名空間的一個類的名稱,意思是,指定使用哪種介質-->
    <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志輸出到exe程序這個相對目錄下-->
      <file value="Log\\Error\\" />
      <!--輸出的日志不會覆蓋以前的信息-->
      <appendToFile value="true" />
      <!--備份文件的個數-->
      <maxSizeRollBackups value="100" />
      <!--單個日志文件的最大大小-->
      <maxFileSize value="10240" />
      <!--是否使用靜態文件名-->
      <staticLogFileName value="false" />
      <!--日志文件名-->
      <datePattern value="yyyyMMdd'.txt'" />
      <!--文件創建的方式,這里是以Date方式創建-->
      <rollingStyle value="Date" />
      <!--錯誤日志布局-->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [Thread: %thread] %newline%message %newline"/>
      </layout>
    </appender>
    <!--信息日志附加介質:輸出到文件-->
    <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志目錄-->
      <file value="Log\\Info\\" />
      <appendToFile value="true" />
      <maxFileSize value="10240" />
      <maxSizeRollBackups value="100" />
      <!--日志文件名是否為靜態-->
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd'.txt'" />
      <rollingStyle value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [Thread: %thread] %message %newline"/>
      </layout>
    </appender>
    <!--調試日志附加介質:輸出到文件-->
    <appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
      <file value="Log\\Debug\\" />
      <appendToFile value="true" />
      <maxFileSize value="10240" />
      <maxSizeRollBackups value="100" />
      <staticLogFileName value="false" />
      <datePattern value="yyyyMMdd'.txt'" />
      <rollingStyle value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%newline%date [Thread: %thread] %message %newline"/>
      </layout>
    </appender>
    <!--日志附加介質:輸出到控制台-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <!--<mapping>
        <level value="ERROR" />
        <foreColor value="White" />
        <backColor value="Red, HighIntensity" />
      </mapping>
      <mapping>
        <level value="DEBUG" />
        <foreColor value="White" />
        <backColor value="Green" />
      </mapping>
      <mapping>
        <level value="INFO" />
        <foreColor value="White" />
        --><!--<backColor value="Yellow" />--><!--
      </mapping>-->
      <layout type="log4net.Layout.PatternLayout">
        <!--%data格式為yyyy-MM-dd HH:mm:ss,sss-->
        <conversionPattern value="%date{yyyy'-'MM'-'dd HH':'mm':'ss} [%-5level] %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Debug"/>
        <param name="LevelMax" value="Fatal"/>
      </filter>
    </appender>
  </log4net>
</configuration>

輸出樣式說明

  • %m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消息
  • %n(new line):換行
  • %d(datetime):輸出當前語句運行的時刻
  • %r(run time):輸出程序從運行到執行到當前語句時消耗的毫秒數
  • %t(thread id):當前語句所在的線程ID
  • %p(priority):日志的當前優先級別,即DEBUG、INFO、WARN…等
  • %c(class):當前日志對象的名稱,例如:
  • %f(file):輸出語句所在的文件名。
  • %l(line):輸出語句所在的行號。
  • %數字:表示該項的最小長度,如果不夠,則用空格填充,如%-5level表示level的最小寬度是5個字符,如果實際長度不夠5個字符則以空格填充。
控制台:LogHelper.cs
using log4net;
using log4net.Config;
using log4net.Repository;
using System.IO;

public class LogHelper
{
    private static ILoggerRepository repository { get; set; }
    private static ILog _logInfo;
    private static ILog _logError;
    private static ILog _logDebug;
    private static ILog logInfo
    {
        get
        {
            if (_logInfo == null)
            {
                Configure();
            }
            return _logInfo;
        }
    }
    private static ILog logError
    {
        get
        {
            if (_logError == null)
            {
                Configure();
            }
            return _logError;
        }
    }
    private static ILog logDebug
    {
        get
        {
            if (_logDebug == null)
            {
                Configure();
            }
            return _logDebug;
        }
    }

    public static void Configure(string repositoryName = "NETCoreRepository", string configFile = "log4net.config")
    {
        repository = LogManager.CreateRepository(repositoryName);
        XmlConfigurator.Configure(repository, new FileInfo(configFile));
        _logInfo = LogManager.GetLogger(repositoryName, "info");
        _logError = LogManager.GetLogger(repositoryName, "error");
        _logDebug = LogManager.GetLogger(repositoryName, "debug");
    }

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

    public static void Debug(string msg)
    {
        logError.Debug(msg);
    }

    public static void Error(string msg)
    {
        logError.Error(msg);
    }
}
.net 5.0 注入中間件方式
引用
  • log4net
  • Microsoft.Extensions.Logging.Log4net.AspNetCore
log4.config【始終復制】
<?xml version="1.0" encoding="utf-8" ?>

<log4net>
  <!--指定日記記錄方式,以滾動文件的方式(文件記錄)-->
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <!--日志路徑-->
    <file value="Log\message" />
    <!--是否是向文件中追加日志-->
    <appendToFile value="true" />
    <!--log保留天數-->
    <param name= "MaxSizeRollBackups" value= "10"/>
    <!--每個文件最大1M-->
    <param name="maximumFileSize" value="1MB" />
    <!--日志根據日期滾動-->
    <param name="RollingStyle" value="Date" />
    <!--日志文件名格式為:logs_20080831.log-->
    <param name="DatePattern" value=""logs_"yyyyMMdd".log"" />
    <!--日志文件名是否是固定不變的-->
    <param name="StaticLogFileName" value="false" />
    <!--布局-->
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date %5level %logger.%method [%line] - MESSAGE: %message%newline %exception" />
    </layout>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="RollingFile" />
  </root>
</log4net>
Program.cs

.ConfigureLogging(loggingBuilder=> 
{
    loggingBuilder.AddLog4Net("log4net.config");
})
使用方式

 

 


免責聲明!

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



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