`
jiasongmao
  • 浏览: 679865 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

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

    博客分类:
  • .NET
阅读更多

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

1Log4net

2Logging Application Block

3NLog

 

一.Log4net

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

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

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  
<configSections>
    
<section name="log4net" 
      type
="log4net.Config.Log4NetConfigurationSectionHandler, 
            log4net-net-1.0"
 />
  
</configSections>

  
<log4net>

    
<root>
      
<level value="WARN" />
      
<appender-ref ref="AdoNetAppender" />
      
<appender-ref ref="ConsoleAppender" />
    
</root>

    
<logger name="testApp.Logging">
      
<level value="DEBUG"/>
    
</logger>

    
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
      
<bufferSize value="100" />
      
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      
<connectionString value="data source=[database server];initial catalog=[database name];integrated security=false;persist security info=True;User ID=[user];Password=[password]" />
      
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
      
<parameter>
        
<parameterName value="@log_date" />
        
<dbType value="DateTime" />
        
<layout type="log4net.Layout.RawTimeStampLayout" />
      
</parameter>
      
<parameter>
        
<parameterName value="@thread" />
        
<dbType value="String" />
        
<size value="255" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%thread" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@log_level" />
        
<dbType value="String" />
        
<size value="50" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%level" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@logger" />
        
<dbType value="String" />
        
<size value="255" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%logger" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@message" />
        
<dbType value="String" />
        
<size value="4000" />
        
<layout type="log4net.Layout.PatternLayout">
          
<conversionPattern value="%message" />
        
</layout>
      
</parameter>
      
<parameter>
        
<parameterName value="@exception" />
        
<dbType value="String" />
        
<size value="2000" />
        
<layout type="log4net.Layout.ExceptionLayout" />
      
</parameter>
    
</appender>

    
<appender name="ConsoleAppender" 
              type
="log4net.Appender.ConsoleAppender" >
      
<layout type="log4net.Layout.PatternLayout">
        
<param name="ConversionPattern" 
           value
="%d [%t] %-5p %c [%x] - %m%n" 
        
/>
      
</layout>
    
</appender>

  
</log4net>
</configuration>

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

Log4net.ILog log = Log4net.LogManager.GetLogger("MyLogger"); 

if (log.IsDebugEnabled)
    log.Debug(
"message"); 

if (log.IsInfoEnabled)
   log.Info(
"message");

Log4net

官方主页: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工具进行完全可视化配置,并且可以设置输出日志信息的格式。如图所示:

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

<configuration>
  
<configSections>
    
<section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging" />
  
</configSections>
  
<loggingConfiguration tracingEnabled="true" defaultCategory="General">
    
<logFilters>
      
<add
          
name="Category"
          type
="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.CategoryFilter, Microsoft.Practices.EnterpriseLibrary.Logging"
          categoryFilterMode
="AllowAllExceptDenied">
        
<categoryFilters>
          
<add name="UI Events" />
        
</categoryFilters>
      
</add>
      
<add
          
name="Priority"
          type
="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging"
          minimumPriority
="2"
                    
/>
      
<add name="LogEnabled Filter"
        type
="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.LogEnabledFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null"
        enabled
="true" 
           
/>
    
</logFilters>
  
</loggingConfiguration>
</configuration>

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

LogEntry logEntry = new LogEntry();

logEntry.EventId 
= 100;

logEntry.Priority 
= 2;

logEntry.Message 
= "Informational message";

//设置多个Category

logEntry.Categories.Add(
"Trace");

logEntry.Categories.Add(
"UI Events");


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也提供了很多的扩展,可以自定义日志输出目标,日志格式,过滤器等。看一个简单的配置示例:NLog虽然没有提供可视化的配置工具,但是安装后,我们会在VS2005New Item里面看到有关本NLog的配置文件这么一项,是用该配置文件是支持自动补全功能的。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
      xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance">
  
<targets>
    
<target name="console" xsi:type="ColoredConsole" 
            layout
="${date:format=HH\:mm\:ss}|${level}|${stacktrace}|${message}"/>
    
<target name="file" xsi:type="File" fileName="${basedir}/file.txt" 
            layout
="${stacktrace} ${message}"/>
  
</targets>
  
<rules>
    
<logger name="*" minlevel="Trace" writeTo="console,file"/>
  
</rules>
</nlog>

在代码中使用如下所示:

static void C() 

    logger.Info(
"Info CCC"); 
}
 

static void B() 

    logger.Trace(
"Trace BBB"); 
    logger.Debug(
"Debug BBB"); 
    logger.Info(
"Info BBB"); 

    C(); 

    logger.Warn(
"Warn BBB"); 
    logger.Error(
"Error BBB"); 
    logger.Fatal(
"Fatal BBB"); 
}
 

static void A() 

    logger.Trace(
"Trace AAA"); 
    logger.Debug(
"Debug AAA"); 
    logger.Info(
"Info AAA"); 

    B(); 

    logger.Warn(
"Warn AAA"); 
    logger.Error(
"Error AAA"); 
    logger.Fatal(
"Fatal AAA"); 
}
 

static void Main(string[] args) 
display: none; background-color: #ffffff; border: #808080 1p
分享到:
评论

相关推荐

    23个.NET开源项目

    ### 23个.NET开源项目:深度解析与应用价值 ...总体而言,这23个.NET开源项目覆盖了从测试、数据访问、架构设计到工具库的各个方面,为.NET开发者提供了丰富的资源和工具,极大地促进了.NET生态的繁荣和发展。

    。net开源项目。net开源项目

    ### .NET 开源项目概述 .NET 是一个由微软开发的应用程序框架,旨在为开发者提供一个统一的编程模型、语言和库。随着 .NET 技术的发展,越来越多的开源项目涌现出来,这些项目不仅有助于提高软件开发效率,还能帮助...

    ASP.NET(C#)三层架构开源OA办公系统MSSQL商业版

    项目描述:ASP.NET(C#)三层架构开源OA办公系统MSSQL商业版,基于B/S架构设计。 包括文件管理、共享下载、消息管理、公文流传、通知管理、内部论坛、人力资源管理、资产管理 等。 文件管理:接收文件 传送文件 文件...

    ASP.NET开源论坛

    "EntLibForum"可能是指论坛系统采用了Enterprise Library(企业库),这是微软提供的一套用于解决.NET应用程序中常见问题的工具集合,比如数据访问、日志记录、异常处理等。 总的来说,【ASP.NET开源论坛】为开发者...

    深入挖掘ASP.NET 2.0系列课程(5):全面优化ASP.NET 2.0

    9. **错误和日志管理**:有效的错误处理和日志记录可以快速定位性能问题,而不会影响用户体验。使用如ELMAH这样的开源库可以帮助实现这一目标。 10. **代码审查和性能测试**:定期进行代码审查,使用性能分析工具...

    .Net轻量级简单日志组件

    日志组件位于System.Database.dll中,项目引用命名空间(System.Logger)即可,日志组件提供五种级别的日志记录(DEBUG|INFO|WARN|ERROR|FATAL),最低DEBUG,最高FATAL,当配置的级别大于等于对应级别时,会自动记录...

    asp.net mvc项目源码

    `EFTracingProvider`可能是实现日志记录或跟踪功能的自定义数据提供者,这对于调试和性能监控非常有用。 在深入研究源码之前,你需要对ASP.NET MVC和三层架构有基本的了解。ASP.NET MVC提供了模型-视图-控制器(MVC...

    .net开源的综合开发框架wojilu框架.zip

    “我记录”这套源码总共包括 两个部分:一个 .net 平台下的全栈式、轻量级开发框架,包括 ORM、MVC、IOC、AOP、JSON、LOG 等,同时包括全套图文教程;用这个框架开发的 SNS 互联网产品。本产品以 SNS 为基础平台,...

    spring.net结合三层AOP异常日志记录功能

    通过查看和运行这个项目,可以更深入地理解Spring.NET如何在实际项目中实现AOP异常日志记录。 综上所述,Spring.NET结合三层架构的AOP异常日志记录功能,为.NET开发者提供了一种有效管理异常和提高系统稳定性的解决...

    .net日志代码

    在.NET开发过程中,日志记录是一项至关重要的任务,它能够帮助开发者追踪程序运行状态,定位错误,优化性能,以及提供调试信息。`.NET日志代码`这个主题涉及到如何在.NET环境中编写和管理日志,包括不同层次的日志...

    精通.NET企业项目开发 (英文版)

    8. **持续学习和社区资源**:书中可能引导读者了解.NET社区,如Stack Overflow、GitHub上的开源项目,以及.NET Foundation等相关资源,以便于持续学习和参与开源项目。 通过阅读《精通.NET企业项目开发》(英文版),...

    基于asp.net mvc的开源网站管理系统

    7. **错误处理与日志记录**:良好的错误处理和日志记录机制是任何系统必备的,这有助于调试和问题定位。 8. **API支持**:为了与其他系统或移动应用进行集成,系统可能提供RESTful API接口,使得数据交换变得简单。...

    漂亮的网站后台.net项目

    7. **依赖库**:可能包含项目的外部依赖,如NuGet包,通过引用这些库可以实现特定功能,如身份验证、日志记录等。 综上所述,这个“漂亮的网站后台 .NET 项目”是一个集成了美观设计与强大功能的后台管理系统,基于...

    ASP.NET开源多用户博客系统_多用户博客空间源码下载.rar

    8. **错误处理与日志记录**:为了确保系统的稳定性和可维护性,系统应有完善的错误处理和日志记录机制。 以上是对这个开源多用户博客系统可能涉及的技术点的分析,具体的实现细节需要通过源码阅读来深入了解。对于...

    c#.net旅游网开源.rar

    8. **错误处理与日志记录**:项目中应该包含错误处理机制,如异常捕获和日志记录,以便于调试和排查问题。 9. **单元测试与集成测试**:高质量的代码通常伴随着充分的测试,项目可能包含了使用NUnit或xUnit等工具...

    ASP.NET-[聊天留言]包哥.net开源留言系统SQL修正版.zip

    在"ASP.NET-[聊天留言]包哥.net开源留言系统SQL修正版.zip"这个压缩包中,包含了一个基于ASP.NET开发的聊天留言系统,该系统经过了SQL修正,旨在提供更加稳定和可靠的运行环境。 1. **ASP.NET Web Forms**:这是ASP...

    asp.net 企业级开发项目源代码及数据库

    ASP.NET企业级开发项目源代码及数据库是针对高级开发者和企业的重要资源,它涵盖了ASP.NET技术在实际项目中的应用和数据库设计。这个压缩包包含了完整的项目源代码,这对于学习、研究或者开发自己的企业级应用程序来...

    .net财务管理系统完整源码,开源财务系统,C#

    7. **错误处理与调试**:良好的错误处理和日志记录机制是系统稳定运行的关键,开发者应充分利用C#的try-catch-finally结构进行异常处理,并利用Visual Studio等工具进行调试。 通过深入研究并理解这套开源财务管理...

    ASP.NET源码——[电子商务]友思B2B拍宝网(.Net开源版).zip

    【ASP.NET源码——[电子商务]友思B2B拍宝网(.Net开源版)】 ASP.NET 是一种由微软开发的服务器端Web应用程序框架,用于构建动态网站、Web应用程序和Web服务。它基于.NET Framework,提供了丰富的功能和工具,使得...

    C# MES_开源源代码

    8. **异常处理与日志记录**:良好的错误处理和日志记录机制是任何系统不可或缺的部分。C# MES会使用try-catch语句处理异常,并通过NLog、log4net等库记录运行日志,便于故障排查和系统优化。 9. **版本控制与持续...

Global site tag (gtag.js) - Google Analytics