日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

浅谈Log4net在项目中如何记录日志

發(fā)布時間:2023/12/4 编程问答 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈Log4net在项目中如何记录日志 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一? ? 引入背景

? ? ???在軟件開發(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。