亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

使用Log4net進(jìn)行日志記錄

 更新時間:2021年12月17日 14:16:53   作者:編程世界里晃蕩  
本文詳細(xì)講解了使用Log4net進(jìn)行日志記錄的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

首先說說為什么要進(jìn)行日志記錄。在一個完整的程序系統(tǒng)里面,日志系統(tǒng)是一個非常重要的功能組成部分。它可以記錄下系統(tǒng)所產(chǎn)生的所有行為,并按照某種規(guī)范表達(dá)出來。我們可以使用日志系統(tǒng)所記錄的信息為系統(tǒng)進(jìn)行排錯,優(yōu)化系統(tǒng)的性能,或者根據(jù)這些信息調(diào)整系統(tǒng)的行為。

Log4net是一個很著名的開源的日志記錄組件。官方網(wǎng)址為:http://logging.apache.org/log4net/ ,使用Log4net能夠很簡單的為我們的程序添加日志記錄功能。下面我們先通過一個網(wǎng)站例子來說明如何在.net中使用log4net。

創(chuàng)建日志記錄步驟

第一步,

當(dāng)然是添加log4net.dll的引用啦,我這里提供一個log4net的dll文件,懶得去官網(wǎng)下的可以到這里下

http://chabaoo.cn/dll/Log4net.dll.html

第二步,

在AssemblyInfo.cs文件中添加下面一句話:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Web.config", Watch = true)]

這句話的意思是log4net會自動尋找配置文件App.config或Web.config從而獲得并加載其中的配置信息。如果想log4net隨時監(jiān)視配置文件以便重新加載的話就要這樣寫按照上面一樣寫(winform程序ConfigFile為App.config)。

第三步,

配置Web.config。

<configuration>
 
  <configSections>
 
        <!--注意:這里需要添加-->
        <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
   </configSections>
  <connectionStrings>
    <add name="ApplicationServices"
         connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
 
   
 
   <!--注意:這里需要添加-->
 
   <log4net>
 
 
        <!--定義輸出到文件中-->
        <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
            <!--定義文件存放位置-->
            <file value="C:\log.txt" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value="yyyyMMdd-HH:mm:ss" />
            <layout type="log4net.Layout.PatternLayout">
                <!--輸出格式-->
                <!--樣例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
                <conversionPattern value="記錄時間:%date 線程ID:[%thread] 日志級別:%-5level 出錯類:%logger property:[%property{NDC}] - 錯誤描述:%message%newline" />
            </layout>
        </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>
 
 
        <!--定義日志的輸出媒介,下面定義日志以四種方式輸出。也可以下面的按照一種類型或其他類型輸出。-->
        <root>
            <!--文件形式記錄日志-->
            <appender-ref ref="LogFileAppender" />
            <!--控制臺控制顯示日志-->
            <appender-ref ref="ConsoleAppender" />
            <!--Windows事件日志-->
            <!--<appender-ref ref="EventLogAppender" />-->
            <!-- 如果不啟用相應(yīng)的日志記錄,可以通過這種方式注釋掉
                <appender-ref ref="AdoNetAppender_Access" />
            -->
        </root>
 
    </log4net>
 
 
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <httpModules>
 
      <add name="fileUpload" type="WebApplication3.ProcessFileModule"/>
    </httpModules>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login.aspx" timeout="2880" />
    </authentication>
 
    <membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
             applicationName="/" />
      </providers>
    </membership>
 
    <profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/"/>
      </providers>
    </profile>
 
    <roleManager enabled="false">
      <providers>
        <clear/>
        <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" />
        <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" />
      </providers>
    </roleManager>
    <httpRuntime maxRequestLength="10240000"/>
  </system.web>
 
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
 
</configuration>

上面這段配置取自周公,配置的說明上面已經(jīng)注釋的比較詳細(xì)了。

第四步,

在程序中記錄信息。我們在項目下Default.aspx的Page_Load方法加入如下代碼:

//獲得log4net實例
ILog log = log4net.LogManager.GetLogger("LogFileAppender");
log.Info("Default.aspx下面的PageLoad方法被執(zhí)行");

然后運行項目,可以發(fā)現(xiàn)在c:\log4netfile.txt中已經(jīng)記錄了一條日志信息:

記錄時間:2011-04-21 21:26:17,729 線程ID:[4] 日志級別:INFO? 出錯類:LogFileAppender property:[(null)] - 錯誤描述:Default.aspx下面的PageLoad方法被執(zhí)行

通過上面這幾步我想您已經(jīng)能夠為程序創(chuàng)建一些簡單日志記錄功能了。下面我們再來詳細(xì)說說log4net其他的一些使用方法與特點。

log4net詳細(xì)說明

這里我通過問答的形式來說明log4net的一些應(yīng)用。

1.log4net總共有幾種記錄方式,每種方式該如何配置與使用?

Log4net目前支持的輸出方式包括:

  • 1 AdoNetAppender
    將日志記錄到數(shù)據(jù)庫中??梢圆捎肧QL和存儲過程兩種方式。
  • 2 AnsiColorTerminalAppender
    在ANSI 窗口終端寫下高亮度的日志事件。
  • 3 AspNetTraceAppender
    能用asp.net中Trace的方式查看記錄的日志。
  • 4 BufferingForwardingAppender
    在輸出到子Appenders之前先緩存日志事件。
  • 5 ConsoleAppender
    將日志輸出到控制臺。
  • 6 EventLogAppender
    將日志寫到Windows Event Log.
  • 7 FileAppender
    將日志寫到文件中。
  • 8 LocalSyslogAppender
    將日志寫到local syslog service (僅用于UNIX環(huán)境下).
  • 9 MemoryAppender
    將日志存到內(nèi)存緩沖區(qū)。
  • 10 NetSendAppender
    將日志輸出到Windows Messenger service.這些日志信息將在用戶終端的對話框中顯示。
  • 11 RemoteSyslogAppender
    通過UDP網(wǎng)絡(luò)協(xié)議將日志寫到Remote syslog service。
  • 12 RemotingAppender
    通過.NET Remoting將日志寫到遠(yuǎn)程接收端。
  • 13 RollingFileAppender
    將日志以回滾文件的形式寫到文件中。
  • 14 SmtpAppender
    將日志寫到郵件中。
  • 15 TraceAppender
    將日志寫到.NET trace 系統(tǒng)。
  • 16 UdpAppender
    將日志connectionless UDP datagrams的形式送到遠(yuǎn)程宿主或以UdpClient的形式廣播。

可以看到目前支持的方式還是很多的,我這里調(diào)幾個認(rèn)為常用的做個例子。

1.文件的方式我們上面已經(jīng)講過了,這里不再做例子了。

2.數(shù)據(jù)庫方式:

首先,添加數(shù)據(jù)庫記錄appender

<appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
        <!--數(shù)據(jù)庫連接字符串-->
        <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>

然后建立c:log4net.mdb 數(shù)據(jù)庫,并在代碼中啟用數(shù)據(jù)庫記錄方式:

//獲得log4net實例
ILog log = log4net.LogManager.GetLogger("AdoNetAppender_Access");
log.Debug("Default.aspx下面的PageLoad方法被執(zhí)行");

這樣日志就被記錄到數(shù)據(jù)庫中了。

2.log4net如何過濾我想要的日志信息,比如一個日志中只記錄程序錯誤日志?

這個需求可以通過配置filter來實現(xiàn)。具體操作如下:

全局方式:

這種方式會將級別應(yīng)用于所有的日志輸入方式。具體操作為在root節(jié)點下添加:

<!--控制級別,由低到高: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF
    比如定義級別為INFO,則INFO級別向下的級別,比如DEBUG日志將不會被記錄
-->
<!--如果沒有定義LEVEL的值,則缺省為DEBUG-->
<level value="ERROR" />

這樣對于所有的日志記錄方式,所有地域ERROR級別的都不會被記錄了。

單獨配置級別方式:

該方式不會影響其他的日志輸入方式。方法如下為,在具體的appender下添加filter:

<filter type="log4net.Filter.LevelRangeFilter">
     <param name="LevelMin" value="ERROR" />
     <param name="LevelMax" value="Fatal" />
 </filter>

這種方式可以配置記錄級別的方位,如果只需要記錄一種,則最大和最小設(shè)置一樣就行了。

3.你上面的日志輸出格式我不喜歡,如何在log4net中配置我想要的日志輸出格式?

log4net的輸入格式定義在每個appender的layout中。具體的有以下內(nèi)置可選項:

%m(message):輸出的日志消息,如ILog.Debug(…)輸出的一條消息?

%n(new line):換行?

%d(datetime):輸出當(dāng)前語句運行的時刻?

%r(run time):輸出程序從運行到執(zhí)行到當(dāng)前語句時消耗的毫秒數(shù)?

%t(thread id):當(dāng)前語句所在的線程ID?

%p(priority): 日志的當(dāng)前優(yōu)先級別,即DEBUG、INFO、WARN…等?

%c(class):當(dāng)前日志對象的名稱,例如:?

%f(file):輸出語句所在的文件名。?

%l(line):輸出語句所在的行號。?

%數(shù)字:表示該項的最小長度,如果不夠,則用空格填充,如“%-5level”表示level的最小寬度是5個字符,如果實際長度不夠5個字符則以空格填充。

通過這些東西,你可以任意組合你喜歡的輸出格式內(nèi)容。

4.有沒有方式控制程序自動按日期記錄日志信息,即每天的日志都在不同的日志文件中?

其實這種方式對應(yīng)于一種特定的記錄方式:RollingFileAppender。這種方式也是基于文件記錄的,不過他提供更加靈活的日志記錄方式。具體說來他可以按日志文件的大小或者日志記錄的時間進(jìn)行自動變換日志文件。

按每天不同的日期進(jìn)行記錄分類:

<appender name="RollingLogFileAppenderEveryMin" type="log4net.Appender.RollingFileAppender">
 
<!--日志文件名開頭-->
 
<file value="c:\logfile.txt" />
 
<!--是否追加到文件-->
 
<appendToFile value="true" />
 
<!--變換的形式為日期-->
 
<rollingStyle value="Date" />
 
<!--日期的格式,每分鐘換一個文件記錄-->
 
<datePattern value="yyyyMMdd-HHmm" />
 
<layout type="log4net.Layout.PatternLayout">
 
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
 
</layout>
 
</appender>

按照日志文件的大小進(jìn)行變換,通過這種方式可以有效降低日志文件體積膨脹的問題:

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
 
<!--日志文件名-->
 
<file value="c:\log.txt"/>
 
<!--是否在文件中追加-->
 
<appendToFile value="true"/>
 
<!--按照文件的大小進(jìn)行變換日志文件-->
 
<rollingStyle value="Size"/>
 
<!--最大變換數(shù)量,如果超過這個數(shù)量則從第一個文件開始復(fù)寫-->
 
<maxSizeRollBackups value="10"/>
 
<!--最大文件大小,支持KB,MB,GB-->
 
<maximumFileSize value="100KB"/>
 
<!--日志文件名是否為靜態(tài)-->
 
<staticLogFileName value="true"/>
 
<layout type="log4net.Layout.PatternLayout">
 
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
 
</layout>
 
</appender>

最后從網(wǎng)上找了一段寫日志的原則,感覺還是很好的:

【寫日志的原則】

  • Ⅰ.在catch后,把異常寫入日志.
  • Ⅱ.在調(diào)用第三方控件的開始和結(jié)束處.
  • Ⅲ.在連接數(shù)據(jù)庫的開始結(jié)束處.
  • Ⅳ.除非必要,不要在循環(huán)體中加入日志,否則一旦出問題可能導(dǎo)致日志暴增.
  • Ⅴ.在自己認(rèn)為很重要的邏輯處寫入日志.

到此這篇關(guān)于使用Log4net進(jìn)行日志記錄的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#開發(fā)答題贏錢游戲(自動答題器)

    C#開發(fā)答題贏錢游戲(自動答題器)

    現(xiàn)在最火的直播游戲,那就是答題贏錢直播了,如百萬英雄、芝士超人、花椒直播、沖頂大會等等,這些游戲的玩法都很簡單,答對12題即可瓜分獎金了。玩法雖簡單但是完全答對12題難度就挺高了,下面小編給大家?guī)砹薈#開發(fā)答題贏錢游戲,需要的朋友參考下吧
    2018-01-01
  • C#微信公眾號開發(fā) 微信事件交互

    C#微信公眾號開發(fā) 微信事件交互

    這篇文章主要介紹了C#微信公眾號開發(fā),微信事件交互的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 詳細(xì)解析C#多線程同步事件及等待句柄

    詳細(xì)解析C#多線程同步事件及等待句柄

    本篇文章主要介紹了C#多線程同步事件及等待句柄,希望通過本篇的介紹能對常見的線程同步方法有一個整體的認(rèn)識,有需要的可以了解一下。
    2016-11-11
  • C#各種異常處理方式總結(jié)

    C#各種異常處理方式總結(jié)

    這篇文章介紹了C#各種異常的處理方式,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • Unity圖形學(xué)之ShaderLab入門基礎(chǔ)

    Unity圖形學(xué)之ShaderLab入門基礎(chǔ)

    Unity中所有Shader文件都通過一種陳述性語言進(jìn)行描述,稱為“ShaderLab”, 這篇文章主要介紹了Unity圖形學(xué)之ShaderLab入門基礎(chǔ),需要的朋友可以參考下
    2022-01-01
  • C# 設(shè)置防火墻的創(chuàng)建規(guī)則

    C# 設(shè)置防火墻的創(chuàng)建規(guī)則

    這篇文章主要介紹了C# 設(shè)置防火墻的創(chuàng)建規(guī)則,幫助大家更好的利用c#操作防火墻,感興趣的朋友可以了解下
    2020-11-11
  • unity實現(xiàn)場景跳轉(zhuǎn)

    unity實現(xiàn)場景跳轉(zhuǎn)

    這篇文章主要為大家詳細(xì)介紹了unity實現(xiàn)場景跳轉(zhuǎn),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

    C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品

    這篇文章主要介紹了C#特性-迭代器(上)及一些研究過程中的副產(chǎn)品,需要的朋友可以參考下
    2014-12-12
  • C#遍歷文件夾及其子目錄的完整實現(xiàn)方法

    C#遍歷文件夾及其子目錄的完整實現(xiàn)方法

    這篇文章主要介紹了C#遍歷文件夾及其子目錄的方法,涉及C#文件與目錄的基本操作技巧,簡單實用,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Unity 百度AI實現(xiàn)人像動漫化效果

    Unity 百度AI實現(xiàn)人像動漫化效果

    這篇文章主要介紹了Unity如何接入百度AI接口, 運用對抗生成網(wǎng)絡(luò)技術(shù),為用戶量身定制千人千面的二次元動漫形象,并支持通過參數(shù)設(shè)置,生成二次元動漫人像。感興趣的可以學(xué)習(xí)一下
    2022-01-01

最新評論