浅谈Log4net在项目中如何记录日志
一? ? 引入背景
? ? ???在軟件開發(fā)周期中,無論是開發(fā)中,或是測試中,或是上線后,選擇合適的工具監(jiān)控程序的運行狀態(tài)至關(guān)重要,只有如此,才能更好地排查程序問題和檢測程序性能問題等。本篇文章主要與大家分享,如何利用Log4net在項目中記錄日志文件。在應(yīng)用程序出現(xiàn)問題時,啟用日志記錄有助于解決問題。使用log4net,可以在運行時啟用日志記錄,而無需修改應(yīng)用程序二進制文件。log4net是幫助程序員輸出日志語句到各種輸出目標(biāo)的工具。
log4net支持如下框架:
NET Standard 1.3 via .NET Core 1.0
Microsoft? .NET Framework 1.0
Microsoft .NET Framework 1.1
Microsoft .NET Framework 2.0
Microsoft .NET Framework 3.5
Microsoft .NET Framework 4.0
Microsoft .NET Framework 4.5
Microsoft .NET Framework 3.5 Client Profile
Microsoft .NET Framework 4.0 Client Profile
Microsoft .NET Compact Framework 1.0
Microsoft .NET Compact Framework 2.0
Mono 1.0
Mono 2.0
Mono 3.5
Mono 4.0
Microsoft Shared Source CLI 1.0
CLI 1.0 Compatible
二? ? log4net概述
(一)日志級別
1.級別歸納
2.級別比較
(1)級別從低=>高排序:ALL<Debug<Info<Warn<Error<Fatal<OFF
(2)日志不能記錄低于最低級別的記錄,如設(shè)置最低級別為Info,則低于Info的級別,都不能記錄
code
測試結(jié)果
3.利用Filter過濾級別
除此之外,還能利用filter級別過濾,來設(shè)置將不同級別記錄到相應(yīng)文件,如將INFO級別信息記錄到INFO文件中,將Error級別信息記錄到Error文件中。
配置文件
后臺代碼
static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? //Log4net幾種提錯類型
? ? ? ? ? ? //創(chuàng)建日志記錄組件
? ? ? ? ? ? ILog? iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? iLog.Debug("Debug", new Exception("Debug"));
? ? ? ? ? ? ? ? iLog.Info("Info", new Exception("Info"));
? ? ? ? ? ? ? ? iLog.Warn("Warn", new Exception("Warn"));
? ? ? ? ? ? ? ? iLog.Error("Error", new Exception("Error"));
? ? ? ? ? ? ? ? iLog.Fatal("Fatal", new Exception("Fatal"));
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new Exception(ex.Message);
? ? ? ? ? ? }
? ? ? ? }
測試結(jié)果
(二)級別繼承
級別繼承很簡單,歸結(jié)為一句話:若本事設(shè)置了級別,則用自己的級別,若沒設(shè)置級別,則繼承離自己最近的級別。
例子1
例子2
?例子3
?例子4
(三)日志輸出形式
1.輸出文件形式歸納
2.項目中常用的輸出形式
3.代碼操作
3.1.在Root中定義日志輸出媒介
<root>
? ? ? <level value="ALL" />
? ? ? <!--定義日志的輸出媒介,如下定義四種方式-->
? ? ? <!--文件形式記錄日志-->
? ? ? <appender-ref ref="LogFileInfoAppender" />
? ? ? <!--<appender-ref ref="LogFileErrorAppender" />-->
? ? ? <!--控制臺顯示日志-->
? ? ? <appender-ref ref="ConsoleAppender" />
? ? ? <!--Windows事件日志-->
? ? ? <appender-ref ref="EventLogAppender" />
? ? ? ?<!--數(shù)據(jù)庫日志-->
? ? ? <appender-ref ref="AdoNetAppender_Oracle" />
</root>
3.2.配置具體的媒介,如下以文件形式為例
<!--定義輸出到文件中-->
? ? <appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender">
? ? ? <!--定義文件存放位置-->
? ? ? <file value="E:/Log/log4netInfoLog.txt" />
? ? ? <appendToFile value="true" />
? ? ? <rollingStyle value="Date" />
? ? ? <datePattern value="yyyyMMdd-HH:mm:ss" />
? ? ? <!---定義布局模板-->
? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? <!--每條日志末尾的文字說明-->
? ? ? ? <footer value="by Alan_beijing" />
? ? ? ? <!--輸出格式-->
? ? ? ? <!--樣例:2008-03-26 13:42:32,111 [10] INFO? Log4NetDemo.MainClass [(null)] - info-->
? ? ? ? <conversionPattern value="記錄時間:%date;文件名:%file;行號:%line;線程ID:[%thread];優(yōu)先級:%priority;%newline
? ? ? ? ? ? ? ? ? ? ? ? ? ? 日志級別:%-5level;運行時間:%r;出錯類:%logger property:[%property{NDC}];錯誤描述:%message" />
? ? ? </layout>
? ? </appender>
3.3.后臺代碼
class Program
? ? {
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? //Log4net幾種提錯類型
? ? ? ? ? ? //創(chuàng)建日志記錄組件
? ? ? ? ? ? ILog? iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? iLog.Debug("Debug", new Exception("Debug"));
? ? ? ? ? ? ? ? iLog.Info("Info", new Exception("Info"));
? ? ? ? ? ? ? ? iLog.Warn("Warn", new Exception("Warn"));
? ? ? ? ? ? ? ? iLog.Error("Error", new Exception("Error"));
? ? ? ? ? ? ? ? iLog.Fatal("Fatal", new Exception("Fatal"));
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new Exception(ex.Message);
? ? ? ? ? ? }
? ? ? ? }
? ? }
3.4.測試結(jié)果
(四)定義日志輸出格式
1.常用輸出格式歸納
?
2.code及測試結(jié)果
?
三? ?代碼實例
?本示例是基于VS2017控制條程序?qū)懙摹?/p>
1.后臺
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using log4net;
using System.Reflection;
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace Log4netDemo
{
? ? class Program
? ? {
? ? ? ? static void Main(string[] args)
? ? ? ? {
? ? ? ? ? ? //Log4net幾種提錯類型
? ? ? ? ? ? //創(chuàng)建日志記錄組件
? ? ? ? ? ? ILog? iLog = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
? ? ? ? ? ? try
? ? ? ? ? ? {
? ? ? ? ? ? ? ? iLog.Debug("Debug", new Exception("Debug"));
? ? ? ? ? ? ? ? iLog.Info("Info", new Exception("Info"));
? ? ? ? ? ? ? ? iLog.Warn("Warn", new Exception("Warn"));
? ? ? ? ? ? ? ? iLog.Error("Error", new Exception("Error"));
? ? ? ? ? ? ? ? iLog.Fatal("Fatal", new Exception("Fatal"));
? ? ? ? ? ? }
? ? ? ? ? ? catch (Exception ex)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? throw new Exception(ex.Message);
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
2.配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
? <!--聲明自定義節(jié)點-->
? <configSections>
? ? <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
? </configSections>
? <appSettings>
? </appSettings>
? <log4net>
? ? <root>
? ? ? <!--<level value="Info" />-->
? ? ? <level value="ALL" />
? ? ? <!--定義日志的輸出媒介,如下定義四種方式-->
? ? ? <!--文件形式記錄日志-->
? ? ? <!--<appender-ref ref="LogFile_MinLevel_Info" />-->
? ? ? <appender-ref ref="LogFileInfoAppender" />
? ? ? <appender-ref ref="LogFileErrorAppender" />
? ? ? <!--控制臺顯示日志-->
? ? ? <!--<appender-ref ref="ConsoleAppender" />-->
? ? ? <!--Windows事件日志-->
? ? ? <!--<appender-ref ref="EventLogAppender" />-->
? ? ? ?<!--數(shù)據(jù)庫日志-->
? ? ? <!--<appender-ref ref="AdoNetAppender_Oracle" />-->
? ? </root>
? ? <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低)-->
? ? <logger name="log4netLevel">
? ? ? <!--<level value="ALL" />
? ? ? <level value="DEBUG" />-->
? ? ? <!--<level value="INFO" />-->
? ? ? <!--<level value="WARN" />
? ? ? <level value="ERROR" />-->
? ? ? <!--<level value="FATAL" />
? ? ? <level value="OFF" />-->
? ? </logger>
? ? <!--定義輸出到文件中-->
? ? <!--<appender name="LogFile_MinLevel_Info" type="log4net.Appender.FileAppender">-->
? ? <appender name="LogFileInfoAppender" type="log4net.Appender.FileAppender">
? ? ? <!--定義文件存放位置-->
? ? ? <file value="E:/Log/log4netLogFile_Info.txt" />
? ? ? <appendToFile value="true" />
? ? ? <rollingStyle value="Date" />
? ? ? <datePattern value="yyyyMMdd-HH:mm:ss" />
? ? ? <!---定義布局模板-->
? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? <!--每條日志末尾的文字說明-->
? ? ? ? <footer value="by Alan_beijing" />
? ? ? ? <!--輸出格式-->
? ? ? ? <!--樣例:2008-03-26 13:42:32,111 [10] INFO? Log4NetDemo.MainClass [(null)] - info-->
? ? ? ? <conversionPattern value="記錄時間:%date;文件名:%file;行號:%line;線程ID:[%thread];優(yōu)先級:%priority;%newline
? ? ? ? ? ? ? ? ? ? ? ? ? ? 日志級別:%-5level;運行時間:%r;出錯類:%logger property:[%property{NDC}];錯誤描述:%message" />
? ? ? </layout>
? ? ? <filter type="log4net.Filter.LevelRangeFilter">
? ? ? ? <param name="LevelMin" value="Info" />
? ? ? ? <param name="LevelMax" value="Info" />
? ? ? </filter>
? ? </appender>
? ? <appender name="LogFileErrorAppender" type="log4net.Appender.FileAppender">
? ? ? <!--定義文件存放位置-->
? ? ? <file value="E:/Log/llog4netLogFile_Error.txt" />
? ? ? <appendToFile value="true" />
? ? ? <rollingStyle value="Date" />
? ? ? <datePattern value="yyyyMMdd-HH:mm:ss" />
? ? ? <!--最大文件大小-->
? ? ? <maximumFileSize value="10MB" />
? ? ? <staticLogFileName value="false"/>
? ? ? <!---定義布局模板-->
? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? <!--每條日志末尾的文字說明-->
? ? ? ? <footer value="by Alan_beijing" />
? ? ? ? <!--輸出格式-->
? ? ? ? <!--樣例:2008-03-26 13:42:32,111 [10] INFO? Log4NetDemo.MainClass [(null)] - info-->
? ? ? ? <conversionPattern value="記錄時間:%date;文件名:%file;行號:%line;線程ID:[%thread];優(yōu)先級:%priority;%newline
? ? ? ? ? ? ? ? ? ? ? ? ? ? 日志級別:%-5level;運行時間:%r;出錯類:%logger property:[%property{NDC}];錯誤描述:%message" />
? ? ? </layout>
? ? ? ?
? ? ? <filter type="log4net.Filter.LevelRangeFilter">
? ? ? ? <param name="LevelMin" value="Error" />
? ? ? ? <param name="LevelMax" value="Error" />
? ? ? </filter>
? ? </appender>
? ? <!--定義輸出到控制臺命令行中-->
? ? <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
? ? ? </layout>
? ? </appender>
? ? <!--定義輸出到windows事件中-->
? ? <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
? ? ? </layout>
? ? </appender>
? ? <!--定義輸出到數(shù)據(jù)庫中,這里舉例輸出到Access數(shù)據(jù)庫中,數(shù)據(jù)庫為C盤的log4net.mdb-->
? ? <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
? ? ? <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
? ? ? <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
? ? ? <!--定義各個參數(shù)-->
? ? ? <parameter>
? ? ? ? <parameterName value="@logDate" />
? ? ? ? <dbType value="String" />
? ? ? ? <size value="240" />
? ? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? ? <conversionPattern value="%date" />
? ? ? ? </layout>
? ? ? </parameter>
? ? ? <parameter>
? ? ? ? <parameterName value="@thread" />
? ? ? ? <dbType value="String" />
? ? ? ? <size value="240" />
? ? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? ? <conversionPattern value="%thread" />
? ? ? ? </layout>
? ? ? </parameter>
? ? ? <parameter>
? ? ? ? <parameterName value="@logLevel" />
? ? ? ? <dbType value="String" />
? ? ? ? <size value="240" />
? ? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? ? <conversionPattern value="%level" />
? ? ? ? </layout>
? ? ? </parameter>
? ? ? <parameter>
? ? ? ? <parameterName value="@logger" />
? ? ? ? <dbType value="String" />
? ? ? ? <size value="240" />
? ? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? ? <conversionPattern value="%logger" />
? ? ? ? </layout>
? ? ? </parameter>
? ? ? <parameter>
? ? ? ? <parameterName value="@message" />
? ? ? ? <dbType value="String" />
? ? ? ? <size value="240" />
? ? ? ? <layout type="log4net.Layout.PatternLayout">
? ? ? ? ? <conversionPattern value="%message" />
? ? ? ? </layout>
? ? ? </parameter>
? ? </appender>
? </log4net>
? <startup>?
? ? ? ? <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
? ? </startup>
</configuration>
四? 推薦鏈接
【01】http://logging.apache.org/log4net/
相關(guān)文章:
.NET Core log4net 使用
把舊系統(tǒng)遷移到.Net Core 2.0 日記(2) - 依賴注入/日志NLog
部署用于生產(chǎn)的Exceptionlees(一個強大易用的日志收集服務(wù))
原文地址:https://www.cnblogs.com/wangjiming/p/8600935.html
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的浅谈Log4net在项目中如何记录日志的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DBCHM-最简单、实用的数据库表列批注
- 下一篇: 讨论过后而引发对EF 6.x和EF Co