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

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介:

   接上文

   上面的配置实例是按照将日志写入文本文件来配置的(节点具体含义见上文),程序调用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。

    另外,使用者还可以定义自己的日志,例如有些情况使用者希望把日志输出至电视机,那么你需要:

  1. 自定义一个Render节点(具体方法见上文)
  2. 使用重载的构造函数,参数为空

          LogProvider lp = new LogProvider()

  1. 使用LogProvider类型的GetLogConfiguration方法获得配置信息,将返回Hashtable。方法传入参数为第一步定义的Render名称。
  2. 提取Hashtable 中的键值获得内容信息例如:

        Hashtable ha = new Hashtable();

        ha ["AppenderContent"].ToString()

    5. 实现IAppLogProvider接口

    这样<AppenderContent> </AppenderContent>节点内容就被获得出来。

 

    IsLine AppLogProvider是一个很好用的日志模块,灵活是它的特性。


本文转自Aicken(李鸣)博客园博客,原文链接:http://www.cnblogs.com/isline/archive/2009/12/26/1632945.html,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
51
分享
相关文章
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
1484 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
鸿蒙开发:console日志输出
针对初学者而言,大家只需要掌握住日志打印即可,等到了鸿蒙应用开发的时候,还有一个鸿蒙原生的打印工具HiLog,到时,我们也会详细的去讲述,也会针对HiLog,封装一个通用的工具类。
67 11
鸿蒙开发:console日志输出
Tauri 开发实践 — Tauri 日志记录功能开发
本文介绍了如何为 Tauri 应用配置日志记录。Tauri 是一个利用 Web 技术构建桌面应用的框架。文章详细说明了如何在 Rust 和 JavaScript 代码中设置和集成日志记录,并控制日志输出。通过添加 `log` crate 和 Tauri 日志插件,可以轻松实现多平台日志记录,包括控制台输出、Webview 控制台和日志文件。文章还展示了如何调整日志级别以优化输出内容。配置完成后,日志记录功能将显著提升开发体验和程序稳定性。
260 1
Tauri 开发实践 — Tauri 日志记录功能开发
|
6月前
|
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
600 3
Spring Boot中的日志框架选择
在Spring Boot开发中,日志管理至关重要。常见的日志框架有Logback、Log4j2、Java Util Logging和Slf4j。选择合适的日志框架需考虑性能、灵活性、社区支持及集成配置。本文以Logback为例,演示了如何记录不同级别的日志消息,并强调合理配置日志框架对提升系统可靠性和开发效率的重要性。
|
4月前
|
.net 自定义日志类
在.NET中,创建自定义日志类有助于更好地管理日志信息。示例展示了如何创建、配置和使用日志记录功能,包括写入日志文件、设置日志级别、格式化消息等。注意事项涵盖时间戳、日志级别、JSON序列化、线程安全、日志格式、文件处理及示例使用。请根据需求调整代码。
73 13
鸿蒙5.0版开发:使用HiLog打印日志(ArkTS)
在HarmonyOS 5.0中,HiLog是系统提供的日志系统,支持DEBUG、INFO、WARN、ERROR、FATAL五种日志级别。本文介绍如何在ArkTS中使用HiLog打印日志,并提供示例代码。通过合理使用HiLog,开发者可以更好地调试和监控应用。
403 16
|
6月前
|
Android|集成 slf4j + logback 作为日志框架
做个简单改造,统一 Android APP 和 Java 后端项目打印日志的体验。
240 1
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
75 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等