ASP.NET企业开发框架IsLine FrameWork系列之八--AppLogProvider日志框架(下)
接上文
上面的配置实例是按照将日志写入文本文件来配置的(节点具体含义见上文),程序调用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是一个很好用的日志模块,灵活是它的特性。
本文详细介绍了ASP.NET企业开发框架中AppLogProvider日志框架的使用方法,包括配置日志实例、写入介质、缓存策略以及自定义日志输出等。通过实例展示了如何配置不同的日志输出方式,如文本文件、数据库、邮件等。

230

被折叠的 条评论
为什么被折叠?



