`
jiasongmao
  • 浏览: 649205 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    .Net轻量级简单日志组件

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

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

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

    专业OA开源办公系统

    工作日志:提交日志 日志记录 批阅日志 日志汇总 日程计划:撰写日程 我的日程 撰写计划 我的计划 工作总结:撰写月总结记录.管理撰写年度总结记录.管理总结分类 审批管理:提交审批 办理审批 申请记录 人力资源:在线...

    OA办公系统开源 VS2005+sql2005

    工作日志:提交日志 日志记录 批阅日志 日志汇总 日程计划:撰写日程 我的日程 撰写计划 我的计划 工作总结:撰写月总结记录.管理撰写年度总结记录.管理总结分类 审批管理:提交审批 办理审批 申请记录 人力资源:在线...

    asp.net知识库

    在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中...

    asp.net博客系统

    本博客采用ASP.NET2.0 c# + MSSQL2005 + XML + jquery + anthem.net开发,暂时为单用户版本,以下简单介绍... 程序基于类似petshop的标准三层架构,方便维护与扩展(不过暂时只支持MSSQL数据库-_-||) 前台使用...

    JAVA上百实例源码以及开源项目源代码

    Java 3DMenu 界面源码 5个目标文件 内容索引:Java源码,窗体界面,3DMenu Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都...

    JAVA上百实例源码以及开源项目

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    EasyPlat2.3快速开发平台

    日志记录等。 用户可以在此基础上7天之内完成快速开发企业实用的系统。(Winxp/Win7+MS SQL2005/2008+VS2010+.NetFramework4+C#)。 目标人员: 有兴趣学习ASP.NET编程人员 培训机构出来人员,任务紧急又要立即见到...

    java写webapi源码-Logging:使用各种记录器框架和Microsoft.Extensions.Logging.ILogger接口的

    日志记录的有用资源。 - 只是辅助方法 - 只是辅助方法 地位 从 1.0.5 版开始生产就绪。 样品 此处提供了利用库功能的高级示例: 内容 日志记录是任何应用程序框架的一个重要方面。 与 Java 日志记录相比,为日志记录...

    .NET 分布式组件库 Exceptionless Foundatio.zip

    很多,并且没有一个通用的抽象组件能够将这些接口集成起来,今天就为大家介绍一款开源的组件库 Foundatio,他们同样出自于Exceptionless团队之手,下面就来看看吧。目录Foundatio 介绍Getting Started缓存队列锁...

    spring boot 全面的样例代码

    - chapter1:[基本项目构建(可作为工程脚手架),引入web模块,完成一个简单的RESTful API]...## 开源项目推荐 - 不错的spring boot实践学习案例:https://git.oschina.net/jeff1993/springboot-learning-example

    ist的matlab代码-youthweb-api:RESTAPIvonYouthweb.net|来自Gitlab的镜像,请参见https:

    该API一直在开发中,当前状态记录在这里。 您可以在此处确切了解其工作方式: 贡献 您可以帮助设计Youthweb API。 您可以在这里找到更多信息: 客户群 这些客户端简化了对API的访问。 如果您已经开发了自己的客户,...

    iWeb开源三剑客之iWebSNS v0.9.9 繁体中文版.rar

    通过它,建站者可以轻松构建一个以好友关系为核心的交流网络,让站点用户可以通过空间、日志、动态、好友圈、群组、相册、站内信、留言板、心情等功能模块记录、展示和分享生活;了解好友动态。 如果你已经拥有大...

    OA系统+手机版源码t源代码

    人力资源:对公司人员的信息档案有一定的管理,涵盖了人事档案、考勤批示、统计、薪资管理、培训记录及奖惩记录等等。 销售管理:大致分为客户方面的管理、产品方面管理以及销售方面管理的综合业务管理。 附件管理...

    集成安卓主流优秀第三方组件框架.zip

    这是一个集成目前Android主流优秀第三方组件、优秀好用的自定义...项目源码的git主页:http://git.oschina.net/zftlive/zftlive javaapk.com之前也介绍过这类的项目源码,可以点击javaapk.com首页的开发框架分类下载。

Global site tag (gtag.js) - Google Analytics