程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> IsLine FrameWork系列之八--AppLogProvider日志框架(下)

IsLine FrameWork系列之八--AppLogProvider日志框架(下)

編輯:關於.NET

接上文

上面的配置實例是按照將日志寫入文本文件來配置的(節點具體含義見上文),程序調用AppLogProvider時,需要進行實例化,在實例化過程中指定使用哪個Render,不同的實例對應不同的配置信息,就可以對應不同的等級、記錄介質,如下:

圖 6 構造函數配置效果 

如上圖所示,使用前先實例化一個日志實例,實例化時有6中內置方式可以選擇,我們剛配置了File節點信息,所以在這裡選擇“File”:

//定義日志實例
     LogProvider lp = new LogProvider(Appenders.File)
     //定義日志實體
     LogEntity le = new LogEntity();
     //給日志內容字段賦值
     le.Exception="IsLine Test";
     le.Message = "OK";
     //將日志內容寫入介質
     lp.WriteLog(le);

這樣就完成了日志寫入過程,效果如下:

圖 7 文檔型日志格式

如日後希望更改日志寫入屬性,比如希望把該日志輸出至Oracle,可以這樣修改配置文件:

<IsLine.AppLog.Configuration>
    <FileRender> //Render名字不變,系統識別這個名字
    <AppenderStyle>Oracle</AppenderStyle> //依附方式改為Oracle
     <AppenderType>StoredProcedure</AppenderType>
   <AppenderInf>IsLine.Data.Configuration.OracleConnectString</AppenderInf>
<AppenderContent>SP_ADD_ILFWLOG.ADD_ILFWLOG</AppenderContent> //存儲過程名字
    <LayoutInf></LayoutInf>
      <Level>Debug</Level>
   </FileRender>
</IsLine.AppLog.Configuration>

這樣“FileRender”Render就指向了Oracle介質,IsLine的Render模塊會自動在內部渲染出一個Oracle承載器供使用,而代碼不需做任何修改。

你還可以定義一個自定義日志:

按照上文的方法,首先配置Render的sectionGroup:在<configSections> </sectionGroup>之間添加以下信息:

<sectionGroup name="IsLine.AppLog.Configuration"> //日志配置
   <section name="YourName" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

然後在</configSections>與<appSettings>之間配置以下節點

<IsLine.AppLog.Configuration>
    < YourName >
      <AppenderStyle>File</AppenderStyle>
      <AppenderType>Text</AppenderType>
      <AppenderInf>aaa/Log4Net1.txt</AppenderInf>
      <AppenderContent>->錯誤時間:@eventDate;->處理等級:@level;->錯誤信息:@exception;->錯誤源:@source;->堆棧跟蹤信息:@StackTrace->錯誤觸發者:@trigger;->消息:@message</AppenderContent>
      <LayoutInf></LayoutInf>
      <Level>Warn</Level>
    </ YourName >
</IsLine.AppLog.Configuration>

最後在程序中使用這個Render:

//定義日志實例,使用重載的構造函數,傳遞自定義Render名字
     LogProvider lp = new LogProvider("YourName")
    //定義日志實體
     LogEntity le = new LogEntity();
     //給日志內容字段賦值
         le.Exception="IsLine Test";
        le.Message = "OK";
     //將日志內容寫入介質
    lp.WriteLog(le);

日志寫入完畢,簡單吧。

日志模塊允許緩存方式,即系統將日志信息累計到一個閥值時,在批量寫入存儲介質,這樣就增強了靈活性。

AppLogProvider提供了多種方式來記錄一個日志消息,可以在應用程序裡創建多個AppLogProvider。

全局緩存,高於此緩存時才會被寫入日志,例如定義緩存中日志條數大於2條,再觸發寫日志,可以在web.config中添加以下配置信息:

<add key="IsLine.AppLog.Configuration.BufferSize" value="2"/>

默認緩存策略是關閉的,只有當添加上面的代碼後,緩存策略才會打開。

附 AppLogProvider配置信息大全:

1. 以文本文件為介質的日志配置

在<configSections> </sectionGroup>之間添加以下信息

<sectionGroup name="IsLine.AppLog.Configuration">
    <section name="FileRender" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

在</configSections>與<appSettings>之間配置以下節點

<IsLine.AppLog.Configuration>
    <FileRender>
      <AppenderStyle>File</AppenderStyle>
      <AppenderType>Text</AppenderType>
      <AppenderInf>aaa/Log4Net1.txt</AppenderInf>
      <AppenderContent>->錯誤時間:@eventDate;->處理等級:@level;->錯誤信息:@exception;->錯誤源:@source;->堆棧跟蹤信息:@StackTrace->錯誤觸發者:@trigger;->消息:@message</AppenderContent>
      <LayoutInf></LayoutInf>
      <Level>Warn</Level>
    </FileRender>
</IsLine.AppLog.Configuration>

程序中實例化

LogProvider lp = new LogProvider(Appenders.File)
     //定義日志實體
     LogEntity le = new LogEntity();
     //給日志內容字段賦值
     le.Exception="IsLine Test";
     le.Message = "OK";
     //將日志內容寫入介質
     lp.WriteLog(le);

2. 以Oracle為介質,使用存儲過程的日志配置

在<configSections> </sectionGroup>之間添加以下信息

<sectionGroup name="IsLine.AppLog.Configuration">
    <section name="OracleUsingSPRender" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

在</configSections>與<appSettings>之間配置以下節點

<IsLine.AppLog.Configuration>
  <OracleUsingSPRender>
    <AppenderStyle>Oracle</AppenderStyle>
    <AppenderType>StoredProcedure</AppenderType>
    <AppenderInf>IsLine.Data.Configuration.OracleConnectString</AppenderInf>
    <AppenderContent>SP_ADD_ILFWLOG.ADD_ILFWLOG</AppenderContent>
    <LayoutInf></LayoutInf>
    <Level>Debug</Level>
  </OracleUsingSPRender>
</IsLine.AppLog.Configuration>

程序中實例化

LogProvider lp = new LogProvider(Appenders.OracleUsingSP)
//定義日志實體
LogEntity le = new LogEntity();
//給日志內容字段賦值
le.Exception="IsLine Test";
le.Message = "OK";
//將日志內容寫入介質
lp.WriteLog(le);

3.以Oracle為介質,使用sql語句的日志配置

在<configSections> </sectionGroup>之間添加以下信息

<sectionGroup name="IsLine.AppLog.Configuration">
    <section name="OracleUsingSPRender" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

在</configSections>與<appSettings>之間配置以下節點

<IsLine.AppLog.Configuration>
    < OracleUsingSPRender >
<AppenderStyle>Oracle</AppenderStyle>
<AppenderType>Text</AppenderType>
<AppenderInf>IsLine.Data.Configuration.OracleConnectString</AppenderInf>
<AppenderContent>"INSERT INTO IsLineFAppLog ([ILEventDate],[ILLevel],[ILSource],[ILTrigger],[ILMessage],[ILException]) VALUES ('@eventDate', '@level', '@source','@trigger', '@message', '@exception')"</AppenderContent>
<LayoutInf></LayoutInf>
<Level>Debug</Level>
    </ OracleUsingSPRender >
</IsLine.AppLog.Configuration>

程序中實例化

LogProvider lp = new LogProvider(Appenders.OracleUsingText)
//定義日志實體
LogEntity le = new LogEntity();
//給日志內容字段賦值
le.Exception="IsLine Test";
le.Message = "OK";
//將日志內容寫入介質
lp.WriteLog(le);

4. 以SQL SERVER為介質,使用存儲過程的日志配置

在<configSections> </sectionGroup>之間添加以下信息

<sectionGroup name="IsLine.AppLog.Configuration">
    <section name="SQLServerUsingSPRender" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

在</configSections>與<appSettings>之間配置以下節點

<IsLine.AppLog.Configuration>
    < SQLServerUsingSPRender>
<AppenderStyle> SQLServer </AppenderStyle>
<AppenderType>StoredProcedure</AppenderType>
<AppenderInf>IsLine.Data.Configuration.SQLConnectString</AppenderInf>
<AppenderContent>SP_ADD_ILFWLOG.ADD_ILFWLOG</AppenderContent>
<LayoutInf></LayoutInf>
<Level>Debug</Level>
    </ SQLServerUsingSPRender>
</IsLine.AppLog.Configuration>

程序中實例化

LogProvider lp = new LogProvider(Appenders.SQLServerUsingSP)
     //定義日志實體
     LogEntity le = new LogEntity();
     //給日志內容字段賦值
        le.Exception="IsLine Test";
        le.Message = "OK";
     //將日志內容寫入介質
     lp.WriteLog(le);

5. 以SQL SERVER為介質,使用sql語句的日志配置

在<configSections> </sectionGroup>之間添加以下信息

<sectionGroup name="IsLine.AppLog.Configuration">
    <section name="SQLServerUsingTextRender" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

在</configSections>與<appSettings>之間配置以下節點

<IsLine.AppLog.Configuration>
    < SQLServerUsingTextRender>
<AppenderStyle> SQLServer </AppenderStyle>
<AppenderType>Text</AppenderType>
<AppenderInf>IsLine.Data.Configuration.SQLConnectString</AppenderInf>
<AppenderContent>"INSERT INTO IsLineFAppLog ([ILEventDate],[ILLevel],[ILSource],[ILTrigger],[ILMessage],[ILException]) VALUES ('@eventDate', '@level', '@source','@trigger', '@message', '@exception')"</AppenderContent>
<LayoutInf></LayoutInf>
<Level>Debug</Level>
    </ SQLServerUsingTextRender>
</IsLine.AppLog.Configuration>

程序中實例化

LogProvider lp = new LogProvider(Appenders.SQLServerUsingText)
     //定義日志實體
     LogEntity le = new LogEntity();
     //給日志內容字段賦值
     le.Exception="IsLine Test";
     le.Message = "OK";
     //將日志內容寫入介質
     lp.WriteLog(le);

6.以郵件收件人為介質的日志配置

在<configSections> </sectionGroup>之間添加以下信息

<sectionGroup name="IsLine.AppLog.Configuration">
    <section name="MailRender" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

在</configSections>與<appSettings>之間配置以下節點 

<IsLine.AppLog.Configuration>
      <MailRender>
        <AppenderStyle>Mail</AppenderStyle>
        <AppenderType>HTML</AppenderType>
        <AppenderInf>收件人</AppenderInf>
        <AppenderContent>郵件內容:@eventDate, @level, @source,@trigger, @message, @exception</AppenderContent>
        <LayoutInf></LayoutInf> //返回給用戶的樣式
        <Level>Debug</Level>
      </MailRender>
    </IsLine.AppLog.Configuration>

程序中實例化

LogProvider lp = new LogProvider(Appenders.Mail)
     //定義日志實體
     LogEntity le = new LogEntity();
     //給日志內容字段賦值
     le.Exception="IsLine Test";
     le.Message = "OK";
     //將日志內容寫入介質
     lp.WriteLog(le);

7. 自定義節點

在<configSections> </sectionGroup>之間添加以下信息

<sectionGroup name="IsLine.AppLog.Configuration">
    <section name="YourName" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

在</configSections>與<appSettings>之間配置以下節點 

<IsLine.AppLog.Configuration>
    <YourName>
<AppenderStyle> SQLServer </AppenderStyle>
<AppenderType>Text</AppenderType>
<AppenderInf>IsLine.Data.Configuration.SQLConnectString</AppenderInf>
<AppenderContent>"INSERT INTO IsLineFAppLog ([ILEventDate],[ILLevel],[ILSource],[ILTrigger],[ILMessage],[ILException]) VALUES ('@eventDate', '@level', '@source','@trigger', '@message', '@exception')"</AppenderContent>
<LayoutInf></LayoutInf>
<Level>Debug</Level>
    </YourName>
</IsLine.AppLog.Configuration>

程序中實例化

LogProvider lp = new LogProvider("YourName")
     //定義日志實體
     LogEntity le = new LogEntity();
     //給日志內容字段賦值
     le.Exception="IsLine Test";
     le.Message = "OK";
     //將日志內容寫入介質
     lp.WriteLog(le);

這樣,你就可以在程序中使用"YourName",進行日志記錄了。這樣做的目的是因為有些時候,我們定義了不同日志實例,來記錄不同類型的日志(比如金流日志、物流日志分開記錄)了。

注意:

1.使用數據庫為介質時,“AppenderInf”節點信息為連接串名稱,這個連接串需要在web.config中添加配置信息:(Oracle為例)

<add key="IsLine.Data.Configuration.OracleConnectString" 
value="Data Source=TNS_NAME;User;Password=111111;Integrated Security=no;
Enlist=false;Pooling=true;" />

2.使用Mail為日志介質時,IsLine FrameWork調用HttpProvider的Mail模塊相關類庫,所以需要額外添加以下配置信息:

<sectionGroup name="IsLine.Message.Configuration"> //發郵件
     <section name="SendMail" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

以及

<IsLine.Message.Configuration>
      <SendMail>
        <Sender>用戶名</Sender>
        <SenderPwd>密碼</SenderPwd>
        <DisplayName>IsLineFrameWork</DisplayName> //顯示姓名
        <MailFrom></MailFrom> //隨便填
        <SMTPAddr>發送郵件服務器</SMTPAddr>
        <SMTPPort>25</SMTPPort> //端口
        <EnableSsl>False</EnableSsl> //是否允許SSL驗證
        <MailEncode>UTF32</MailEncode> //郵件標題與內容編碼UTF8 ASCII Default Unicode UTF32
        <IsBodyHtml>True</IsBodyHtml> //郵件內容是否支持HTML
        <IsSendAsync>False</IsSendAsync> //是否采取異步發送
      </SendMail>
   </IsLine.Message.Configuration>

3.< sectionGroup ></ sectionGroup >信息和<IsLine.AppLog.Configuration>

</IsLine.AppLog.Configuration>信息需要一一對應,並可以多套信息並存,例如同時使用文本文件和Oracle數據庫記錄日志:

<configSections> </sectionGroup>之間加入:

<sectionGroup name="IsLine.AppLog.Configuration">
    <section name="FileRender" type="IsLine.Data.Configuration.SuitConfig"/>
    <section name="OracleUsingSPRender" type="IsLine.Data.Configuration.SuitConfig"/>
</sectionGroup>

</configSections>與<appSettings>之間加入:

<IsLine.AppLog.Configuration>
   <FileRender>
    <AppenderStyle>File</AppenderStyle>
    <AppenderType>Text</AppenderType>
    <AppenderInf>IsLineLog/Log4Net1.txt</AppenderInf>
    <AppenderContent>-&gt;Event Date:@eventDate;-&gt;Level:@level;-&gt;Message:@exception;-&gt;Source:@source;-&gt;Stack Trace:@StackTrace-&gt;Trigger:@trigger;-&gt;Memo:@message</AppenderContent>
    <LayoutInf></LayoutInf>
    <Level>Debug</Level>
   </FileRender>
   <OracleUsingSPRender>
    <AppenderStyle>Oracle</AppenderStyle>
    <AppenderType>StoredProcedure</AppenderType>
    <AppenderInf>IsLine.Data.Configuration.OracleConnectString</AppenderInf>
    <AppenderContent>SP_ADD_ILFWLOG.ADD_ILFWLOG</AppenderContent>
    <LayoutInf></LayoutInf>
    <Level>Debug</Level>
   </OracleUsingSPRender>
  </IsLine.AppLog.Configuration>

 

程序中實例化

LogProvider lp1 = new LogProvider(Appenders.File)
     LogProvider lp2 = new LogProvider(Appenders. SQLServerUsingSP)
     //定義日志實體
     LogEntity le = new LogEntity();
     //給日志內容字段賦值
     le.Exception="IsLine Test";
     //將日志內容寫入介質
     Lp1.WriteLog(le);
     Lp2.WriteLog(le);

這樣"IsLine Test"內容將會同時被寫入文件和Oralce。

另外,使用者還可以定義自己的日志,例如有些情況使用者希望把日志輸出至電視機,那麼你需要:

自定義一個Render節點(具體方法見上文)

使用重載的構造函數,參數為空

LogProvider lp = new LogProvider()

使用LogProvider類型的GetLogConfiguration方法獲得配置信息,將返回Hashtable。方法傳入參數為第一步定義的Render名稱。

提取Hashtable 中的鍵值獲得內容信息例如:

Hashtable ha = new Hashtable();
ha ["AppenderContent"].ToString()

5. 實現IAppLogProvider接口

這樣<AppenderContent> </AppenderContent>節點內容就被獲得出來。

IsLine AppLogProvider是一個很好用的日志模塊,靈活是它的特性。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved