时间: 2020-11-21|46次围观|0 条评论

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

1Log4net

2Logging Application Block

3NLog

 

一.Log4net

Log4net是从java平台下非常优秀的日志记录框架log4j上移植到.NET下的,它是apache基金资助的项目的一部分。Log4net可以帮助我们把日志信息输出到各种不同目标(文本文件、数据库、控制台等)的.net类库,它可以容易的加载到开发项目中,实现程序调试和运行的时候的日志信息输出,提供了比.net自己提供的debug类和trace类的功能更多,使用起来也是非常的简单。在Log4net 主要有四种重要的组件,分别是Logge, Repository, Appender以及 LayoutLog4net支持两种不同的配置方式:配置文件和代码配置,一般情况下推荐使用配置文件,一个完整的配置示例如下:

.NET开源项目介绍及资源推荐:日志记录插图
<?
xml version="1.0" encoding="utf-8" 
?>

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

<
configuration
>

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

<
configSections
>

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

<
section 
name
="log4net"
 
.NET开源项目介绍及资源推荐:日志记录插图      type

="log4net.Config.Log4NetConfigurationSectionHandler, 
.NET开源项目介绍及资源推荐:日志记录插图            log4net-net-1.0"

 
/>

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

</
configSections
>

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

<
log4net
>

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

<
root
>

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

<
level 
value
="WARN"
 
/>

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

<
appender-ref 
ref
="AdoNetAppender"
 
/>

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

<
appender-ref 
ref
="ConsoleAppender"
 
/>

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

</
root
>

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

<
logger 
name
="testApp.Logging"
>

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

<
level 
value
="DEBUG"
/>

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

</
logger
>

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

<
appender 
name
="AdoNetAppender"
 type
="log4net.Appender.AdoNetAppender"
>

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

<
bufferSize 
value
="100"
 
/>

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

<
connectionType 
value
="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
 
/>

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

<
connectionString 
value
="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]"
 
/>

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

<
commandText 
value
="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)"
 
/>

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

<
parameter
>

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

<
parameterName 
value
="@log_date"
 
/>

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

<
dbType 
value
="DateTime"
 
/>

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

<
layout 
type
="log4net.Layout.RawTimeStampLayout"
 
/>

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

</
parameter
>

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

<
parameter
>

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

<
parameterName 
value
="@thread"
 
/>

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

<
dbType 
value
="String"
 
/>

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

<
size 
value
="255"
 
/>

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

<
layout 
type
="log4net.Layout.PatternLayout"
>

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

<
conversionPattern 
value
="%thread"
 
/>

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

</
layout
>

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

</
parameter
>

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

<
parameter
>

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

<
parameterName 
value
="@log_level"
 
/>

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

<
dbType 
value
="String"
 
/>

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

<
size 
value
="50"
 
/>

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

<
layout 
type
="log4net.Layout.PatternLayout"
>

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

<
conversionPattern 
value
="%level"
 
/>

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

</
layout
>

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

</
parameter
>

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

<
parameter
>

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

<
parameterName 
value
="@logger"
 
/>

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

<
dbType 
value
="String"
 
/>

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

<
size 
value
="255"
 
/>

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

<
layout 
type
="log4net.Layout.PatternLayout"
>

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

<
conversionPattern 
value
="%logger"
 
/>

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

</
layout
>

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

</
parameter
>

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

<
parameter
>

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

<
parameterName 
value
="@message"
 
/>

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

<
dbType 
value
="String"
 
/>

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

<
size 
value
="4000"
 
/>

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

<
layout 
type
="log4net.Layout.PatternLayout"
>

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

<
conversionPattern 
value
="%message"
 
/>

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

</
layout
>

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

</
parameter
>

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

<
parameter
>

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

<
parameterName 
value
="@exception"
 
/>

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

<
dbType 
value
="String"
 
/>

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

<
size 
value
="2000"
 
/>

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

<
layout 
type
="log4net.Layout.ExceptionLayout"
 
/>

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

</
parameter
>

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

</
appender
>

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

<
appender 
name
="ConsoleAppender"
 
.NET开源项目介绍及资源推荐:日志记录插图              type

="log4net.Appender.ConsoleAppender"
 
>

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

<
layout 
type
="log4net.Layout.PatternLayout"
>

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

<
param 
name
="ConversionPattern"
 
.NET开源项目介绍及资源推荐:日志记录插图           value

="%d [%t] %-5p %c [%x] - %m%n"
 
.NET开源项目介绍及资源推荐:日志记录插图        

/>

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

</
layout
>

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

</
appender
>

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

</
log4net
>

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

</
configuration
>

在该示例中,配置了两种目标的输出,分别为数据库和控制台方式,在代码中使用示例:

.NET开源项目介绍及资源推荐:日志记录插图
Log4net.ILog log 
=
 Log4net.LogManager.GetLogger(
"
MyLogger
"
); 
.NET开源项目介绍及资源推荐:日志记录插图
.NET开源项目介绍及资源推荐:日志记录插图

if
 (log.IsDebugEnabled)
.NET开源项目介绍及资源推荐:日志记录插图    log.Debug(

"
message
"
); 
.NET开源项目介绍及资源推荐:日志记录插图
.NET开源项目介绍及资源推荐:日志记录插图

if
 (log.IsInfoEnabled)
.NET开源项目介绍及资源推荐:日志记录插图   log.Info(

"
message
"
);

Log4net已经能够完全满足我们日常开发的日志记录功能,但是它容易为人所诟病的一点是没有可视化的配置工具支持,需要手工编写配置文件。如果你还在担心这一点,不妨看看这篇《Log4net GUI configuration tool》文章,文中作者为我们提供了一种Log4net的可视化配置工具,界面如下所示:

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

官方主页:http://logging.apache.org/log4net/

学习资料

1Log4net官方文档

2Sema翻译的Log4net使用指南 (个人认为,如果你从没有接触过Log4net,看这篇就足够使用它了)

3.菩提树的Log4net五步走也很值得推荐。

 

二.Logging Application Block

Logging Application Block是微软Enterprise Library其中的一个应用程序块,可以使开发人员可以在其应用程序中集成标准的日志和监测功能,应用程序可以使用日志和监测块在多个位置记录事件,记录的位置包括:事件日志(Event Log)、电子邮件(Email)、数据库(DataBase)、文本文件(TextFile)、消息队列(MSMQ)、WMI、用户自定义位置。并且使用Enterprise Library Configuration工具进行完全可视化配置,并且可以设置输出日志信息的格式。如图所示:

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

配置完成后,所有的配置都放在了应用程序配置文件里面(针对EL2.0):

.NET开源项目介绍及资源推荐:日志记录插图
<
configuration
>

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

<
configSections
>

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

<
section 
name
="loggingConfiguration"
 type
="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging"
 
/>

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

</
configSections
>

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

<
loggingConfiguration 
tracingEnabled
="true"
 defaultCategory
="General"
>

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

<
logFilters
>

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

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

name
="Category"

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

="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, Microsoft.Practices.EnterpriseLibrary.Logging"

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

="AllowAllExceptDenied"
>

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

<
categoryFilters
>

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

<
add 
name
="UI Events"
 
/>

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

</
categoryFilters
>

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

</
add
>

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

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

name
="Priority"

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

="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging"

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

="2"

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

/>

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

<
add 
name
="LogEnabled Filter"

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

="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.LogEnabledFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"

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

="true"
 
.NET开源项目介绍及资源推荐:日志记录插图           

/>

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

</
logFilters
>

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

</
loggingConfiguration
>

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

</
configuration
>

在代码中使用时非常简单,如下代码片断所示:

.NET开源项目介绍及资源推荐:日志记录插图
LogEntry logEntry 
=
 
new
 LogEntry();
.NET开源项目介绍及资源推荐:日志记录插图
.NET开源项目介绍及资源推荐:日志记录插图logEntry.EventId 

=
 
100
;
.NET开源项目介绍及资源推荐:日志记录插图
.NET开源项目介绍及资源推荐:日志记录插图logEntry.Priority 

=
 
2
;
.NET开源项目介绍及资源推荐:日志记录插图
.NET开源项目介绍及资源推荐:日志记录插图logEntry.Message 

=
 
"
Informational message
"
;
.NET开源项目介绍及资源推荐:日志记录插图
.NET开源项目介绍及资源推荐:日志记录插图

//
设置多个Category

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


.NET开源项目介绍及资源推荐:日志记录插图logEntry.Categories.Add(

"
Trace
"
);
.NET开源项目介绍及资源推荐:日志记录插图
.NET开源项目介绍及资源推荐:日志记录插图logEntry.Categories.Add(

"
UI Events
"
);
.NET开源项目介绍及资源推荐:日志记录插图
.NET开源项目介绍及资源推荐:日志记录插图
.NET开源项目介绍及资源推荐:日志记录插图Logger.Write(logEntry);

很多朋友使用Logging Application Block,有一个担心的地方就是Enterprise Library 2.0中把所有的配置信息都放在了应用程序配置文件里面,这样由配置工具生成的配置代码和我们手工添加的一些配置代码混合在一起,会显得非常混乱,如果你有这样的疑问,想把每一个应用程序块的配置信息单独放在外部文件中,不妨看看这篇文章《Enterprise Library 2.0 技巧(1):如何使用外部配置文件

关于Logging Application Block还应该提一下它的可扩展性,除了系统中默认的输出目标之外,用户可以自行扩展自己的目标,比如说控制台等;除此之外,用户也可以扩展自己的日志输出格式,比如说XML格式等。

官方主页:http://msdn.microsoft.com/practices/

学习资源

1Enterprise Library Step By Step系列(七):日志和监测应用程序块——入门篇

2Enterprise Library Step By Step系列(八):日志和监测应用程序块——进阶篇

3Enterprise Library 2.0(2):Logging Application Block学习

4Enterprise Library 2.0 技巧(3):记录ASP.NET站点中未处理的异常

5Enterprise Library 2.0 技巧(4):如何用编程的方法来配置Logging Application Block

6Enterprise Library 2.0 Hands On Lab 翻译(4):日志应用程序块(一)

7Enterprise Library 2.0 Hands On Lab 翻译(5):日志应用程序块(二)

8Enterprise Library 2.0 Hands On Lab 翻译(6):日志应用程序块(三)

 

三.NLog

NLogC#编写的开源日志类库,它的设计思想是使其简单而灵活。NLog让你处理诊断的日志消息,用相关信息扩充消息,依照你的选择格式化日志消息和把日志消息输出到一个或多个目的地,基本上类似于Log4net。同样,NLog也提供了很多的扩展,可以自定义日志输出目标,日志格式,过滤器等。看一个简单的配置示例:

.NET开源项目介绍及资源推荐:日志记录插图
<
nlog 
xmlns
="http://www.nlog-project.org/schemas/NLog.xsd"
 
.NET开源项目介绍及资源推荐:日志记录插图      xmlns:xsi

="http://www.w3.org/2001/XMLSchema-instance"
>

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

<
targets
>

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

<
target 
name
="console"
 xsi:type
="ColoredConsole"
 
.NET开源项目介绍及资源推荐:日志记录插图            layout

="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}"
/>

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

<
target 
name
="file"
 xsi:type
="File"
 fileName
="${basedir}/file.txt"
 
.NET开源项目介绍及资源推荐:日志记录插图            layout

="${stacktrace} ${message}"
/>

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

</
targets
>

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

<
rules
>

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

<
logger 
name
="*"
 minlevel
="Trace"
 writeTo
="console,file"
/>

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

</
rules
>

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

</
nlog
>

在代码中使用如下所示:

.NET开源项目介绍及资源推荐:日志记录插图
static
 
void
 C() 
.NET开源项目介绍及资源推荐:日志记录插图3.NET开源项目介绍及资源推荐:日志记录插图4

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

.NET开源项目介绍及资源推荐:日志记录插图6    logger.Info(
"Info CCC"); 
.NET开源项目介绍及资源推荐:日志记录插图7}

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

static
 
void
 B() 
.NET开源项目介绍及资源推荐:日志记录插图3.NET开源项目介绍及资源推荐:日志记录插图4

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

.NET开源项目介绍及资源推荐:日志记录插图6    logger.Trace(
"Trace BBB"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Debug(
"Debug BBB"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Info(
"Info BBB"); 
.NET开源项目介绍及资源推荐:日志记录插图6
.NET开源项目介绍及资源推荐:日志记录插图6    C(); 
.NET开源项目介绍及资源推荐:日志记录插图6
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Warn(
"Warn BBB"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Error(
"Error BBB"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Fatal(
"Fatal BBB"); 
.NET开源项目介绍及资源推荐:日志记录插图7}

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

static
 
void
 A() 
.NET开源项目介绍及资源推荐:日志记录插图3.NET开源项目介绍及资源推荐:日志记录插图4

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

.NET开源项目介绍及资源推荐:日志记录插图6    logger.Trace(
"Trace AAA"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Debug(
"Debug AAA"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Info(
"Info AAA"); 
.NET开源项目介绍及资源推荐:日志记录插图6
.NET开源项目介绍及资源推荐:日志记录插图6    B(); 
.NET开源项目介绍及资源推荐:日志记录插图6
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Warn(
"Warn AAA"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Error(
"Error AAA"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Fatal(
"Fatal AAA"); 
.NET开源项目介绍及资源推荐:日志记录插图7}

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

static
 
void
 Main(
string
[] args) 
.NET开源项目介绍及资源推荐:日志记录插图3.NET开源项目介绍及资源推荐:日志记录插图4

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

.NET开源项目介绍及资源推荐:日志记录插图6    logger.Trace(
"This is a Trace message"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Debug(
"This is a Debug message"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Info(
"This is an Info message"); 
.NET开源项目介绍及资源推荐:日志记录插图6
.NET开源项目介绍及资源推荐:日志记录插图6    A(); 
.NET开源项目介绍及资源推荐:日志记录插图6
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Warn(
"This is a Warn message"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Error(
"This is an Error message"); 
.NET开源项目介绍及资源推荐:日志记录插图6    logger.Fatal(
"This is a Fatal error message"); 
.NET开源项目介绍及资源推荐:日志记录插图6
.NET开源项目介绍及资源推荐:日志记录插图7}

NLog虽然没有提供可视化的配置工具,但是安装后,我们会在VS2005New Item里面看到有关本NLog的配置文件这么一项,是用该配置文件是支持自动补全功能的。

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

官方主页:http://www.nlog-project.org/

学习资源

没有发现目前有好的中文学习资源,大家可以参考官方文档,希望有时间可以写几篇NLog的使用教程,弥补一下当前中文文档的空缺。

 

总结

以上简单的介绍了.NET下的几种开源日志记录框架,如果你的系统整体架构都使用了Enterprise Library,那么使用Logging Application Block更适合你;否则,如果使用了NHiberante或者Castle等数据持久框架,那么选用Log4net将会更适合,因为在NH中本身就是用Log4net作为日志记录工具的;在没有使用任何其他框架的情况下,可以在以上几种工具中自行选用,个人认为它们都很优秀!

转载于:https://www.cnblogs.com/Terrylee/archive/2006/12/03/opensource_framework_and_resource_recommendation_Log.html

原文链接:https://blog.csdn.net/weixin_30342827/article/details/97571567

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

本博客所有文章如无特别注明均为原创。
复制或转载请以超链接形式注明转自起风了,原文地址《.NET开源项目介绍及资源推荐:日志记录
   

还没有人抢沙发呢~