一直想找一个好用的日子类,今天偶然的机会看到了log4net这个类库,过来学习一下。

log4net是.NET框架下的一个日子类库,官网是http://logging.apache.org/log4net/,打开就一股浓浓的Apache 风格扑鼻而来。

  • 下载地址:

http://apache.fayea.com//logging/log4net/binaries/log4net-1.2.15-bin-newkey.zip

  • 目录结构:

├─bin
│  ├─cli
│  │  └─1.0
│  ├─mono
│  │  ├─1.0
│  │  ├─2.0
│  │  ├─3.5
│  │  └─4.0
│  ├─net
│  │  ├─1.0
│  │  ├─1.1
│  │  ├─2.0
│  │  ├─3.5
│  │  ├─4.0
│  │  └─4.5
│  └─net-cp
│      ├─3.5
│      └─4.0
└─doc

如果是win下的一般使用net文件夹,找到对应的.net版本引用dll即可。

  • 使用方法:主要分为2部分,配置和调用

配置

按照官方文档的说明配置可以通过代码和配置文件两种。

  • 配置文件:

通过配置文件配置一般是使用系统的配置文件,比如WinForm的app.config,Web的web.config,也可以自定义xml文件,但是要通过log4net.Config.XmlConfigurator.Configure(…)手动初始化。

一个简单的配置文件模板如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configsections><section name="log4net" type="System.Configuration.IgnoreSectionHandler">
<log4net>
<appender name="X" type="log4net.Appender.X">
<layout type="log4net.Layout.PatternLayout">
<conversionpattern value="XX">
</conversionpattern></layout>
</appender>
<root>
<level value="XXX">
<appender-ref ref="X">
</appender-ref></level></root>
</log4net></section></configsections></configuration>
  • Appender来定制各种日志的存储介质和模板,支持数据库、文件和网络,具体类型有:AdoNet , AnsiColorTerminal , AspNetTrace , BufferingForwarding , ColoredConsole , Console , Debug , EventLog , File , Forwarding , LocalSyslog , ManagedColoredConsole , Memory , NetSend , OutputDebugString , RemoteSyslog , Remoting , RollingFile , Smtp , SmtpPickupDir , Telnet , Trace , Udp。
  • Root节点来定义什么级别使用什么Appender,appender-ref的ref就是之前定制的Appender的name。
  • 其中appender. Layout. conversionPattern的value就是用来定义每一条日志的输出格式的。支持以下但不仅限于宏:(支持首字母缩写)

%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
%f(file):输出语句所在的文件名。
%l(line):输出语句所在的行号。
%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。

  • 来举几个例子吧
  • 控制台输出日志

(如果是WinForm,这个库是不能自己建立控制台窗体的,可以通过WinAPI的 [DllImport(“kernel32.dll”)]public static extern Boolean AllocConsole(); 先自行创建控制台)

<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline">
</conversionpattern></layout>
</appender>
  • 控制台-按照不同级别彩色输出

    <appender name="ManagedColoredConsoleAppender" type="log4net.Appender.ManagedColoredConsoleAppender">
    <mapping>
    <level value="ERROR">
    <forecolor value="White">
    <backcolor value="Red">
    </backcolor></forecolor></level></mapping>
    <layout type="log4net.Layout.PatternLayout">
    <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline">
    </conversionpattern></layout>
    </appender>
  • 普通文件日志
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="log-file.txt">
    <appendtofile value="true">
    <layout type="log4net.Layout.PatternLayout">
    <conversionpattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline">
    </conversionpattern></layout>
    </appendtofile></file></appender>
  • RollingFileAppender日志(不知道具体怎么翻译,就是可以按照日期分类,按指定文件大小拆分日志,指定最大拆分数量那种)
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log\\">
    <appendtofile value="true">
    <datepattern value="yyyy\\MM\\dd'.txt'">
    <staticlogfilename value="false">
    <layout type="log4net.Layout.PatternLayout">
    <conversionpattern value="记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message %n">
    </conversionpattern></layout>
    </staticlogfilename></datepattern></appendtofile></file></appender>
  • 转发日志(按照条件将不同级别的日志转发给不同appender)
    <appender name="ForwardingAppender" type="log4net.Appender. ForwardingAppender">
    <threshold value="WARN">
    <appender-ref ref="RollingFileAppender">
    </appender-ref></threshold>
    </appender>
  • 缓存转发器(不知道效率会不会提高)
    <appender name="BufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender">
    <buffersize value="100">
    <appender-ref ref="RollingFileAppender">
    </appender-ref></buffersize>
    </appender>
  • 代码:

通过代码动态配置主要通过这个函数:

log4net.Config.BasicConfigurator.Configure()

他有5个重载:

public static ICollection Configure();
public static ICollection Configure(IAppender appender);
public static ICollection Configure(params IAppender[] appenders);
public static ICollection Configure(ILoggerRepository repository);
public static ICollection Configure(ILoggerRepository repository, IAppender appender);
public static ICollection Configure(ILoggerRepository repository, params IAppender[] appenders);

appender参数应该和签名XML配置差不多。

  1. 调用

调用很简单啦。现在类里面见一个对象:

private static readonly ILog log = LogManager.GetLogger(typeof(JSShareObj));

其中public static ILog GetLogger(Type type)中的参数type会显示在前面模板中的%logger中。

然后就可以调用log的各种方法了:

Log.Debug,Log.Error,Log.Fatal,Log.Info,Log.Warn

log4net学习笔记的更多相关文章

  1. [转载]Log4net学习笔记

    Log4net 学习笔记: 主要是根据apache站点整理的: 原文链接:http://logging.apache.org/log4net/release/sdk/ http://logging.a ...

  2. asp.net MVC日志插件Log4Net学习笔记二:保存日志到sqlserver的配置

    1.写到sqlserver的配置: <!--保存到SQLSERVER数据库日志--> <log4net> <appender name="AdoNetAppen ...

  3. asp.net MVC日志插件Log4Net学习笔记一:保存日志到本地

    log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息参见Apache网站.它是针对Java的log4j(Log For Java的)姊妹工具.用过lo ...

  4. log4net 学习笔记

    记入最基本的用法 : refer : http://www.cnblogs.com/aehyok/archive/2013/05/07/3066010.html <configuration&g ...

  5. Log4Net学习笔记(1)-完整的例子

    一.开发环境 编译器:VS2013 .Net版本:4.5 二.开发流程 1.从nuget上获取log4net 2.配置log4net的配置文件 <?xml version="1.0&q ...

  6. NuGet学习笔记(转)

    NuGet学习笔记(1)——初识NuGet及快速安装使用 http://kb.cnblogs.com/page/143190/ 1. NuGet是什么? NuGet is a Visual Studi ...

  7. MVC学习笔记索引帖

    [MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习 ...

  8. 【转】NuGet学习笔记

    关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...

  9. Hadoop源码学习笔记(2) ——进入main函数打印包信息

    Hadoop源码学习笔记(2) ——进入main函数打印包信息 找到了main函数,也建立了快速启动的方法,然后我们就进去看一看. 进入NameNode和DataNode的主函数后,发现形式差不多: ...

随机推荐

  1. Oracle数据库入门——如何根据物化视图日志快速刷新物化视图

    Oracle物化视图的快速刷新机制是通过物化视图日志完成的.Oracle如何通过一个物化视图日志就可以支持多个物化视图的快速刷新呢,本文简单的描述一下刷新的原理. 首先,看一下物化视图的结构:SQL& ...

  2. 二十一、【.Net开源框架】EFW框架Web前端开发之目录结构和使用FireBug调试方法

    回<[开源]EFW框架系列文章索引> EFW框架源代码下载V1.2:http://pan.baidu.com/s/1hcnuA EFW框架实例源代码下载:http://pan.baidu. ...

  3. Ip 地址

    访问 ip.mayfirst.org可以显示你的ip地址,如果你可以联网的话.

  4. codeforces MUH and Cube Walls

    题意:给定两个序列a ,b, 如果在a中存在一段连续的序列使得 a[i]-b[0]==k, a[i+1]-b[1]==k.... a[i+n-1]-b[n-1]==k 就说b串在a串中出现过!最后输出 ...

  5. 栈的图文解析 和 对应3种语言的实现(C/C++/Java)

    概要 本章会先对栈的原理进行介绍,然后分别通过C/C++/Java三种语言来演示栈的实现示例.注意:本文所说的栈是数据结构中的栈,而不是内存模型中栈.内容包括:1. 栈的介绍2. 栈的C实现3. 栈的 ...

  6. Linux - Yum的常用方法总结

    简述 rpm是由红帽公司开发的软件包管理方式,使用rpm可以方便的进行软件的安装.查询.卸载.升级等工作. 但是rpm软件包之间的依赖性问题往往会很繁琐,尤其是软件由多个rpm包组成时. Yum(全称 ...

  7. SQL Server里ORDER BY的歧义性

    在今天的文章里,我想谈下SQL Server里非常有争议和复杂的话题:ORDER BY子句的歧义性. 视图与ORDER BY 我们用一个非常简单的SELECT语句开始. -- A very simpl ...

  8. 另一个 OleDbParameterCollection 中已包含 OleDbParameter 错误分析及解决办法

    程序非常简单,就是从一个表中取出一个符合要求的数据,如果取到,就把该数据对应的计数加1.也就是执行不同的两个SQL语句操作同一个表,并且这两个SQL的参数是一样的.在一个函数里完成这个调用.执行第二个 ...

  9. 解决tomcat was unable to start within问题

    这个问题可能大家都熟悉,以前碰到这个问题,重新启动一次eclipse就好了,随着我的一个项目的增大,我发现这种情况越来越多,到底是怎么回事? 出现这个情况的原因有两个,要么是你的数据库连接connec ...

  10. AEAI BPM流程集成平台V3.0.2版本开源发布

    本次开源发布的是AEAI BPMV3.0.2版流程平台,该版本是数通畅联首次正式对外发布的版本,产品现已开源并上传至开源社区http://www.oschina.net/p/aeai-bpm. 产品说 ...