接上文
上面的配置實例是按照將日志寫入文本文件來配置的(節點具體含義見上文),程序調用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>->Event Date:@eventDate;->Level:@level;->Message:@exception;->Source:@source;->Stack Trace:@StackTrace->Trigger:@trigger;->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是一個很好用的日志模塊,靈活是它的特性。