.NET开源项目介绍及资源推荐:日志记录

简介:


在项目开发中,日志记录是任何时候都少不了的,在本文中,将简单介绍一下如下几种日志记录工具,以及推荐一些学习的资源:

1 Log4net
2 Logging Application Block
3 NLog
 
一.Log4net
Log4net 是从java平台下非常优秀的日志记录框架log4j上移植到.NET下的,它是apache基金资助的项目的一部分。Log4net可以帮助我们把日志信息输出到各种不同目标(文本文件、数据库、控制台等)的.net类库,它可以容易的加载到开发项目中,实现程序调试和运行的时候的日志信息输出,提供了比.net自己提供的debug类和trace类的功能更多,使用起来也是非常的简单。在Log4net 主要有四种重要的组件,分别是Logge, Repository, Appender以及 LayoutLog4net支持两种不同的配置方式:配置文件和代码配置,一般情况下推荐使用配置文件,一个完整的配置示例如下:
None.gif <? xml version="1.0" encoding="utf-8"  ?>
None.gif
< configuration >
None.gif  
< configSections >
None.gif    
< section  name ="log4net"  
None.gif      type
="log4net.Config.Log4NetConfigurationSectionHandler, 
None.gif            log4net-net-1.0"
  />
None.gif  
</ configSections >
None.gif
None.gif  
< log4net >
None.gif
None.gif    
< root >
None.gif      
< level  value ="WARN"   />
None.gif      
< appender-ref  ref ="AdoNetAppender"   />
None.gif      
< appender-ref  ref ="ConsoleAppender"   />
None.gif    
</ root >
None.gif
None.gif    
< logger  name ="testApp.Logging" >
None.gif      
< level  value ="DEBUG" />
None.gif    
</ logger >
None.gif
None.gif    
< appender  name ="AdoNetAppender"  type ="log4net.Appender.AdoNetAppender" >
None.gif      
< bufferSize  value ="100"   />
None.gif      
< connectionType  value ="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"   />
None.gif      
< connectionString  value ="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]"   />
None.gif      
< commandText  value ="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"   />
None.gif      
< parameter >
None.gif        
< parameterName  value ="@log_date"   />
None.gif        
< dbType  value ="DateTime"   />
None.gif        
< layout  type ="log4net.Layout.RawTimeStampLayout"   />
None.gif      
</ parameter >
None.gif      
< parameter >
None.gif        
< parameterName  value ="@thread"   />
None.gif        
< dbType  value ="String"   />
None.gif        
< size  value ="255"   />
None.gif        
< layout  type ="log4net.Layout.PatternLayout" >
None.gif          
< conversionPattern  value ="%thread"   />
None.gif        
</ layout >
None.gif      
</ parameter >
None.gif      
< parameter >
None.gif        
< parameterName  value ="@log_level"   />
None.gif        
< dbType  value ="String"   />
None.gif        
< size  value ="50"   />
None.gif        
< layout  type ="log4net.Layout.PatternLayout" >
None.gif          
< conversionPattern  value ="%level"   />
None.gif        
</ layout >
None.gif      
</ parameter >
None.gif      
< parameter >
None.gif        
< parameterName  value ="@logger"   />
None.gif        
< dbType  value ="String"   />
None.gif        
< size  value ="255"   />
None.gif        
< layout  type ="log4net.Layout.PatternLayout" >
None.gif          
< conversionPattern  value ="%logger"   />
None.gif        
</ layout >
None.gif      
</ parameter >
None.gif      
< parameter >
None.gif        
< parameterName  value ="@message"   />
None.gif        
< dbType  value ="String"   />
None.gif        
< size  value ="4000"   />
None.gif        
< layout  type ="log4net.Layout.PatternLayout" >
None.gif          
< conversionPattern  value ="%message"   />
None.gif        
</ layout >
None.gif      
</ parameter >
None.gif      
< parameter >
None.gif        
< parameterName  value ="@exception"   />
None.gif        
< dbType  value ="String"   />
None.gif        
< size  value ="2000"   />
None.gif        
< layout  type ="log4net.Layout.ExceptionLayout"   />
None.gif      
</ parameter >
None.gif    
</ appender >
None.gif
None.gif    
< appender  name ="ConsoleAppender"  
None.gif              type
="log4net.Appender.ConsoleAppender"   >
None.gif      
< layout  type ="log4net.Layout.PatternLayout" >
None.gif        
< param  name ="ConversionPattern"  
None.gif           value
="%d [%t] %-5p %c [%x] - %m%n"  
None.gif        
/>
None.gif      
</ layout >
None.gif    
</ appender >
None.gif
None.gif  
</ log4net >
None.gif
</ configuration >
在该示例中,配置了两种目标的输出,分别为数据库和控制台方式,在代码中使用示例:
None.gif Log4net.ILog log  =  Log4net.LogManager.GetLogger( " MyLogger " ); 
None.gif
None.gif
if  (log.IsDebugEnabled)
None.gif    log.Debug(
" message " ); 
None.gif
None.gif
if  (log.IsInfoEnabled)
None.gif   log.Info(
" message " );
Log4net 已经能够完全满足我们日常开发的日志记录功能,但是它容易为人所诟病的一点是没有可视化的配置工具支持,需要手工编写配置文件。如果你还在担心这一点,不妨看看这篇《Log4net GUI configuration tool》文章,文中作者为我们提供了一种Log4net的可视化配置工具,界面如下所示:
学习资料
1 Log4net官方文档
2 Sema翻译的Log4net使用指南 (个人认为,如果你从没有接触过Log4net,看这篇就足够使用它了)
3 .菩提树的Log4net五步走也很值得推荐。
 
二.Logging Application Block
Logging Application Block 是微软Enterprise Library其中的一个应用程序块,可以使开发人员可以在其应用程序中集成标准的日志和监测功能,应用程序可以使用日志和监测块在多个位置记录事件,记录的位置包括:事件日志(Event Log)、电子邮件(Email)、数据库(DataBase)、文本文件(TextFile)、消息队列(MSMQ)、WMI、用户自定义位置。并且使用Enterprise Library Configuration工具进行完全可视化配置,并且可以设置输出日志信息的格式。如图所示:
配置完成后,所有的配置都放在了应用程序配置文件里面(针对EL2.0):
None.gif < configuration >
None.gif  
< configSections >
None.gif    
< section  name ="loggingConfiguration"  type ="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging"   />
None.gif  
</ configSections >
None.gif  
< loggingConfiguration  tracingEnabled ="true"  defaultCategory ="General" >
None.gif    
< logFilters >
None.gif      
< add
None.gif          
name ="Category"
None.gif          type
="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, Microsoft.Practices.EnterpriseLibrary.Logging"
None.gif          categoryFilterMode
="AllowAllExceptDenied" >
None.gif        
< categoryFilters >
None.gif          
< add  name ="UI Events"   />
None.gif        
</ categoryFilters >
None.gif      
</ add >
None.gif      
< add
None.gif          
name ="Priority"
None.gif          type
="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging"
None.gif          minimumPriority
="2"
None.gif                    
/>
None.gif      
< add  name ="LogEnabled Filter"
None.gif        type
="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.LogEnabledFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
None.gif        enabled
="true"  
None.gif           
/>
None.gif    
</ logFilters >
None.gif  
</ loggingConfiguration >
None.gif
</ configuration >
在代码中使用时非常简单,如下代码片断所示:
None.gif LogEntry logEntry  =   new  LogEntry();
None.gif
None.giflogEntry.EventId 
=   100 ;
None.gif
None.giflogEntry.Priority 
=   2 ;
None.gif
None.giflogEntry.Message 
=   " Informational message " ;
None.gif
None.gif
// 设置多个Category
None.gif

None.giflogEntry.Categories.Add(
" Trace " );
None.gif
None.giflogEntry.Categories.Add(
" UI Events " );
None.gif
None.gif
None.gifLogger.Write(logEntry);
很多朋友使用 Logging Application Block,有一个担心的地方就是 Enterprise Library 2.0中把所有的配置信息都放在了应用程序配置文件里面,这样由配置工具生成的配置代码和我们手工添加的一些配置代码混合在一起,会显得非常混乱,如果你有这样的疑问,想把每一个应用程序块的配置信息单独放在外部文件中,不妨看看这篇文章《 Enterprise Library 2.0 技巧(1):如何使用外部配置文件
关于Logging Application Block还应该提一下它的可扩展性,除了系统中默认的输出目标之外,用户可以自行扩展自己的目标,比如说控制台等;除此之外,用户也可以扩展自己的日志输出格式,比如说XML格式等。
学习资源
 
三.NLog
NLog C#编写的开源日志类库,它的设计思想是使其简单而灵活。NLog让你处理诊断的日志消息,用相关信息扩充消息,依照你的选择格式化日志消息和把日志消息输出到一个或多个目的地,基本上类似于Log4net。同样,NLog也提供了很多的扩展,可以自定义日志输出目标,日志格式,过滤器等。看一个简单的配置示例:
None.gif < nlog  xmlns ="http://www.nlog-project.org/schemas/NLog.xsd"  
None.gif      xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance" >
None.gif  
< targets >
None.gif    
< target  name ="console"  xsi:type ="ColoredConsole"  
None.gif            layout
="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}" />
None.gif    
< target  name ="file"  xsi:type ="File"  fileName ="${basedir}/file.txt"  
None.gif            layout
="${stacktrace} ${message}" />
None.gif  
</ targets >
None.gif  
< rules >
None.gif    
< logger  name ="*"  minlevel ="Trace"  writeTo ="console,file" />
None.gif  
</ rules >
None.gif
</ nlog >
在代码中使用如下所示:
None.gif static   void  C() 
ExpandedBlockStart.gif

InBlock.gif    logger.Info(
"Info CCC"); 
ExpandedBlockEnd.gif}
 
None.gif
None.gif
static   void  B() 
ExpandedBlockStart.gif

InBlock.gif    logger.Trace(
"Trace BBB"); 
InBlock.gif    logger.Debug(
"Debug BBB"); 
InBlock.gif    logger.Info(
"Info BBB"); 
InBlock.gif
InBlock.gif    C(); 
InBlock.gif
InBlock.gif    logger.Warn(
"Warn BBB"); 
InBlock.gif    logger.Error(
"Error BBB"); 
InBlock.gif    logger.Fatal(
"Fatal BBB"); 
ExpandedBlockEnd.gif}
 
None.gif
None.gif
static   void  A() 
ExpandedBlockStart.gif

InBlock.gif    logger.Trace(
"Trace AAA"); 
InBlock.gif    logger.Debug(
"Debug AAA"); 
InBlock.gif    logger.Info(
"Info AAA"); 
InBlock.gif
InBlock.gif    B(); 
InBlock.gif
InBlock.gif    logger.Warn(
"Warn AAA"); 
InBlock.gif    logger.Error(
"Error AAA"); 
InBlock.gif    logger.Fatal(
"Fatal AAA"); 
ExpandedBlockEnd.gif}
 
None.gif
None.gif
static   void  Main( string [] args) 
ExpandedBlockStart.gif

InBlock.gif    logger.Trace(
"This is a Trace message"); 
InBlock.gif    logger.Debug(
"This is a Debug message"); 
InBlock.gif    logger.Info(
"This is an Info message"); 
InBlock.gif
InBlock.gif    A(); 
InBlock.gif
InBlock.gif    logger.Warn(
"This is a Warn message"); 
InBlock.gif    logger.Error(
"This is an Error message"); 
InBlock.gif    logger.Fatal(
"This is a Fatal error message"); 
InBlock.gif
ExpandedBlockEnd.gif}
NLog 虽然没有提供可视化的配置工具,但是安装后,我们会在VS2005New Item里面看到有关本NLog的配置文件这么一项,是用该配置文件是支持自动补全功能的。
学习资源
没有发现目前有好的中文学习资源,大家可以参考官方文档,希望有时间可以写几篇NLog的使用教程,弥补一下当前中文文档的空缺。
 
总结
以上简单的介绍了.NET下的几种开源日志记录框架,如果你的系统整体架构都使用了Enterprise Library,那么使用Logging Application Block更适合你;否则,如果使用了NHiberante或者Castle等数据持久框架,那么选用Log4net将会更适合,因为在NH中本身就是用Log4net作为日志记录工具的;在没有使用任何其他框架的情况下,可以在以上几种工具中自行选用,个人认为它们都很优秀!










本文转自lihuijun51CTO博客,原文链接:  http://blog.51cto.com/terrylee/67594 ,如需转载请自行联系原作者

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
5月前
|
JavaScript 关系型数据库 MySQL
盘点6个.NetCore+Vue前后端分离的开源项目
盘点6个.NetCore+Vue前后端分离的开源项目
205 0
|
5月前
|
开发框架 .NET 测试技术
.NET Core 日志记录程序和常用日志记录框架
本文主要内容为.NET Core的日志记录程序和常使用的日志记录框架的简单使用 首先,打开VS2019新建一个ASP.NET Core Web Api项目,项目创建好后会有一个集成好的天气预报的类和控制器,接下来,我们的方法就在天气控制器里完成。
49 0
|
5月前
|
开发框架 前端开发 API
私有化部署大模型:5个.Net开源项目
私有化部署大模型:5个.Net开源项目
78 0
|
5月前
|
开发框架 前端开发 .NET
盘点16个.Net开源项目
盘点16个.Net开源项目
97 0
|
5月前
|
程序员 C# 开发工具
推荐100个.Net开源项目
推荐100个.Net开源项目
56 0
|
5月前
|
开发框架 前端开发 NoSQL
推荐一个.Net Core开发的Websocket群聊、私聊的开源项目
推荐一个.Net Core开发的Websocket群聊、私聊的开源项目
50 0
|
5月前
|
监控 关系型数据库 调度
盘点5个.Net开发的服务器进程监控、性能监控、任务调度的开源项目
盘点5个.Net开发的服务器进程监控、性能监控、任务调度的开源项目
127 0
|
XML 编解码 C#
.NET MAUI 安卓 UI 资源设置
本文主要介绍使用 MAUI 开发安卓应用时,如何更换和处理 UI 资源:应用名称,图标,主题配色,状态栏,闪屏。
439 0
.NET MAUI 安卓 UI 资源设置
|
数据可视化 搜索推荐 API
七、.net core(.NET 6)使用Serilog进行配置和实现日志记录
使用Serilog来实现日志记录先安装Serilog六件套神装包:
1537 0
七、.net core(.NET 6)使用Serilog进行配置和实现日志记录
|
运维 JavaScript 前端开发
一套.Net6可落地的微服务、分布式开源项目
一个轻量级的微服务架构,支持经典三层架构和DDD架构模式开发,技师选型都是目前主流的技术。是一个前后端分离架构,前端采用Vue开发,后端使用.Net6架构。Api接口遵循RESTful规范,接口安全验证采用JWT机制。
386 0
一套.Net6可落地的微服务、分布式开源项目

热门文章

最新文章