C#中使用Log4記錄日志


具體步驟如下:

  1. 從網上下載log4net對應.net版本的dll
  2. 在C#項目中引用該dll
  3. 創建log4net對應的配置文件
  4. 在程序中使用

log4net的配置文件如下: 

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <appender name="Log4Name" type="log4net.Appender.RollingFileAppender">
    <!--日志路徑-->
    <param name="File" value="F:\Log2015\StorageSystem\Log4Name\log.log" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留個數-->
    <param name="MaxSizeRollBackups" value="200" />
    <!--單個日志文件大小-->
    <param name="MaximumFileSize" value="5MB" />
    <!--日志文件名是否是固定不變的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式為:2008-08-31.log-->
    <DatePattern value="yyyy-MM-dd HH'時.log'"></DatePattern>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <!--按照何種方式產生多個日志文件(日期[Date],文件大小[Size],混合[Composite])-->
    <param name="RollingStyle" value="Size" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="記錄時間:%date%n線程ID:[%thread] %n日志級別:%-5level%n記錄位置:%location%n異常:%exception%n消息:%message%newline%n------------------------------------------%n" />
    </layout>
    <filter type="log4net.Filter.LoggerMatchFilter">
      <param name="LoggerToMatch" value="Log4Name" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
  </appender>
  <root>
    <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
    <level value="DEBUG" />
    <appender-ref ref="Log4Name" />
  </root>
</log4net>

 創建LogHelper如下:

public class LogHelper
{
    private static ILog log=null;
    public static ILog Log
    {
        get
        {
            if (log == null)
            {
                //log4.config表示log4的配置文件
                string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Config", "log4.config");
                log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(fileName));//修改日志配置無需重啟程序,自動加載
                //Log4Name表示配置文件中的日志名稱
                log = LogManager.GetLogger("Log4Name");
            }
            return log;
        }
    }
}

 

 使用方式如下:

LogHelper.Log.Error("出錯了哇");

 創建的日志如圖:

配置文件里面內容比較多,可以查閱相關文檔進行詳細配置! 


 另外,有時候我們需要把不同級別的文件放到不同的目錄,首先配置文件如下:

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <appender name="AccesssService_Err" type="log4net.Appender.RollingFileAppender">
    <!--日志路徑-->
    <param name="File" value="Errors\log.log" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留個數-->
    <param name="MaxSizeRollBackups" value="200" />
    <!--單個日志文件大小-->
    <param name="MaximumFileSize" value="5MB" />
    <!--日志文件名是否是固定不變的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式為:2008-08-31.log-->
    <DatePattern value="yyyy-MM-dd HH'時.log'"></DatePattern>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <!--按照何種方式產生多個日志文件(日期[Date],文件大小[Size],混合[Composite])-->
    <param name="RollingStyle" value="Size" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="記錄時間:%date%n線程ID:[%thread] %n日志級別:%-5level%n記錄位置:%location%n消息描述:%property{Message}%n異常:%exception%n消息:%message%newline%n------------------------------------------%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="WARN" />
      <levelMax value="FATAL" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
  </appender>
  <appender name="AccesssService_info" type="log4net.Appender.RollingFileAppender">
    <!--日志路徑-->
    <param name="File" value="MyLogs\log.log" />
    <!--是否是向文件中追加日志-->
    <param name="AppendToFile" value="true" />
    <!--log保留個數-->
    <param name="MaxSizeRollBackups" value="200" />
    <!--單個日志文件大小-->
    <param name="MaximumFileSize" value="5MB" />
    <!--日志文件名是否是固定不變的-->
    <param name="StaticLogFileName" value="false" />
    <!--日志文件名格式為:2008-08-31.log-->
    <DatePattern value="yyyy-MM-dd HH'時.log'"></DatePattern>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <!--按照何種方式產生多個日志文件(日期[Date],文件大小[Size],混合[Composite])-->
    <param name="RollingStyle" value="Size" />
    <layout type="log4net.Layout.PatternLayout">
      <param name="ConversionPattern" value="記錄時間:%date%n線程ID:[%thread] %n日志級別:%-5level%n記錄位置:%location%n消息描述:%property{Message}%n異常:%exception%n消息:%message%newline%n------------------------------------------%n" />
    </layout>
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="DEBUG" />
      <levelMax value="INFO" />
    </filter>
    <filter type="log4net.Filter.DenyAllFilter" />
  </appender>
  <logger name="gdLog4net" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="AccesssService_Err" />
    <appender-ref ref="AccesssService_info" />
  </logger>
</log4net>
View Code

 

 LogHelper代碼如下:

public class LogHelper
{
    private static ILog log = null;
    public static ILog Log
    {
        get
        {
            if (log == null)
            {
                //log4.config表示log4的配置文件
                string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "config", "log4.config");
                log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(fileName));
                log = LogManager.GetLogger("gdLog4net");
            }
            return log;
        }
    }
}

1.主要是log實例化有變化。通過GetLogger方法獲取xml配種中gdLog4net的Logger

2.xml中定義了logger,關於logger和root,可以參考文章:https://www.cnblogs.com/zhangchenliang/p/4546352.html 的后面部分內容,大概意思就是說root其實就是一個頂級的logger,所有其他logger都默認繼承這個root。如果需要讓logger阻斷和root的聯系,可以將logger的additivity設置為false。

 


免責聲明!

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



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