log4net学习笔记
一直想找一个好用的日子类,今天偶然的机会看到了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配置差不多。
- 调用
调用很简单啦。现在类里面见一个对象:
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学习笔记的更多相关文章
- [转载]Log4net学习笔记
Log4net 学习笔记: 主要是根据apache站点整理的: 原文链接:http://logging.apache.org/log4net/release/sdk/ http://logging.a ...
- asp.net MVC日志插件Log4Net学习笔记二:保存日志到sqlserver的配置
1.写到sqlserver的配置: <!--保存到SQLSERVER数据库日志--> <log4net> <appender name="AdoNetAppen ...
- asp.net MVC日志插件Log4Net学习笔记一:保存日志到本地
log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息参见Apache网站.它是针对Java的log4j(Log For Java的)姊妹工具.用过lo ...
- log4net 学习笔记
记入最基本的用法 : refer : http://www.cnblogs.com/aehyok/archive/2013/05/07/3066010.html <configuration&g ...
- Log4Net学习笔记(1)-完整的例子
一.开发环境 编译器:VS2013 .Net版本:4.5 二.开发流程 1.从nuget上获取log4net 2.配置log4net的配置文件 <?xml version="1.0&q ...
- NuGet学习笔记(转)
NuGet学习笔记(1)——初识NuGet及快速安装使用 http://kb.cnblogs.com/page/143190/ 1. NuGet是什么? NuGet is a Visual Studi ...
- MVC学习笔记索引帖
[MVC学习笔记]1.项目结构搭建及单个类在各个层次中的实现 [MVC学习笔记]2.使用T4模板生成其他类的具体实现 [MVC学习笔记]3.使用Spring.Net应用IOC(依赖倒置) [MVC学习 ...
- 【转】NuGet学习笔记
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- Hadoop源码学习笔记(2) ——进入main函数打印包信息
Hadoop源码学习笔记(2) ——进入main函数打印包信息 找到了main函数,也建立了快速启动的方法,然后我们就进去看一看. 进入NameNode和DataNode的主函数后,发现形式差不多: ...
随机推荐
- 用 Python 和 OpenCV 检测图片上的条形码
用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...
- MFC的消息管理
一般而言,与视图状态和用户输入有关的命令由视图类来处理,与文件操作有关的命令由文档类来处理,与窗口布局有关的命令由主框架类来处理,与程序的运行状态有关的命令由APP类来处理.
- nginx rewrite重写与防盗链配置
nginx rewrite重写规则与防盗链配置方法 时间:2016-02-04 15:16:58来源:网络 导读:nginx rewrite重写规则与防盗链配置方法,rewrite规则格式中flag标 ...
- debian软件源source.list文件格式说明
在安装完debian操作系统之后大家做的第一件事大概就是修改source.list文件了吧,否则你是无法在线更新软件的,那么source.list文件中的各个配置项的具体含义你搞懂了么?下面就以我的s ...
- codeforces C. Bits(数学题+或运算)
题意:给定一个区间,求区间中的一个数,这个数表示成二进制的时候,数字1的个数最多! 如果有多个这样的数字,输出最小的那个! 思路:对左区间的这个数lx的二进制 从右往左将0变成1,直到lx的值大于右区 ...
- TogetherJS – 酷!在网站中添加在线实时协作功能
TogetherJS是一个免费.开源的 JavaScript 库,来自 Mozilla 实验室,可以实现基于 Web 的在线协作功能.把 TogetherJS 添加到您的网站中,您的用户可以在实时的互 ...
- mysql主从复制显示正常,数据没同步现象。
当时在一个服务器上开启了多实例,主从复制结构图如下: 当时在192.168.10.3的服务器上用show slave status;显示的是正常的复制的,两个线程都为yes,并且读与写的pos也一直在 ...
- 高级四则运算器—结对项目反思(193 & 105)
高级四则运算器—结对项目反思(193 & 105) 本周我和一位韩国同学(71061105)一起结对编程完成了我们的结对项目——高级的小学四则运算题目生成器. PSP表格 PSP2.1 P ...
- thread_fork/join并发框架2
转自 http://blog.csdn.net/mr_zhuqiang/article/details/48300229 三.使用异步方式 invokeAll(task1,task2); 是同步方式 ...
- js获取url参数的两种方法
js获取参数,在以前我都是用正在去拆分,然后获取,这种方式感觉是最简单的 方式1: function QueryString(item) { var sValue=location.search.ma ...