您的位置:首页 > 移动开发

ASP.NET企业开发框架IsLine FrameWork系列之八--AppLogProvider日志框架(下)

2009-12-26 19:30 701 查看
接上文

上面的配置实例是按照将日志写入文本文件来配置的(节点具体含义见上文),程序调用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是一个很好用的日志模块,灵活是它的特性。

我是李鸣(Aicken) 欢迎您关注我的下一篇文章。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐