Log4Net不同日志类型写入到不同文件
1. 一直在用log4net,从来没有自己整理过。实践出真知,只有自己整理过才能真正掌握。 2. log4net,应该读logfornet,以前一直说log4,log4............ |
安装
NuGet:
AssemblyInfo.cs :
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
配置
log4net.config
<log4net> <root>
<level value="DEBUG" />
<appender-ref ref="DebugRollingFileAppender" />
<appender-ref ref="InfoRollingFileAppender" />
<appender-ref ref="WarnRollingFileAppender" />
<appender-ref ref="ErrorRollingFileAppender" />
</root> <appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs/Debug/" />
<appendToFile value="true" />
<immediateFlush value="true" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH".log"" />
<MaximumFileSize value="50MB"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} [%t] %c :%newline %m%n %newline " />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="DEBUG" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender> <appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs/Info/" />
<appendToFile value="true" />
<immediateFlush value="true" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH".log"" />
<MaximumFileSize value="50MB"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender> <appender name="WarnRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs/Warn/" />
<appendToFile value="true" />
<immediateFlush value="true" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH".log"" />
<MaximumFileSize value="50MB"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="WARN" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender> <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
<file value="Logs/Error/" />
<appendToFile value="true" />
<immediateFlush value="true" />
<staticLogFileName value="false" />
<rollingStyle value="Date" />
<datePattern value="yyyy-MM-dd\\yyyy-MM-dd_HH".log"" />
<MaximumFileSize value="50MB"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.ffff} %p{NDC}:%newline %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender> </log4net>
客户端
private ILog _log = log4net.LogManager.GetLogger("LogTestController");
public ActionResult Index()
{
_log.Info("Info");
_log.Error("Error");
_log.Debug("Debug");
_log.Warn("Warn"); return View();
}
root
1.root元素没有属性,所有logger默认继承它,root是必须配置的。 2.level元素:只有在这个级别或之上的事件才会被记录 【OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL 】 3.appender-ref元素:指定一个或多个appender |
appender
1.定义日志的输出方式,只能作为 log4net 的子元素。name属性必须唯一,type属性必须指定。 【一般写文件日志用log4net.Appender.RollingFileAppender,可以根据日期格式或者文件大小来决定是否新建一个log.txt】 2.file元素:指定日志路径。 3.appendToFile元素:是否支持分割文件。 4.rollingStyle元素:【Size:按日志大小,Date:日期格式分割】。 5.datePattern元素:日期格式。 6.MaximumFileSize元素:最小日志文件大小。 7.layout元素:日志输出格式。【log4net.Layout.PatternLayout】。 8.filter元素:指定级别的日志输出【LevelMatchFilter】 或者指定一个范围级别的日志输出【LevelRangeFilter】 |
PatterLayout的格式化字符串:
Conversion Pattern Name | Effect |
---|---|
a | 等价于appdomain |
appdomain | 引发日志事件的应用程序域的友好名称。(我在使用中一般是可执行文件的名字。) |
c | 等价于 logger |
C | 等价于 type |
class | 等价于 type |
d | 等价于 date |
date |
发生日志事件的本地时间。 使用 DE<%utcdate 输出UTC时间。date后面还可以跟一个日期格式,用大括号括起来。DE<例如:%date{HH:mm:ss,fff}或者%date{dd MMM yyyy HH:mm:ss,fff}。如果date后面什么也不跟,将使用ISO8601 格式 。 日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。 另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 AbsoluteTimeDateFormatter, DateTimeDateFormatter和Iso8601DateFormatter。例如: %date{ISO8601}或%date{ABSOLUTE}。 它们的性能要好于ToString。 |
exception |
异常信息 日志事件中必须存了一个异常对象,如果日志事件不包含没有异常对象,将什么也不输出。异常输出完毕后会跟一个换行。一般会在输出异常前加一个换行,并将异常放在最后。 |
F | 等价于 file |
file |
发生日志请求的源代码文件的名字。 警告:只在调试的时候有效。调用本地信息会影响性能。 |
identity |
当前活动用户的名字(Principal.Identity.Name). 警告:会影响性能。(我测试的时候%identity返回都是空的。) |
l | 等价于 location |
L | 等价于 line |
location |
引发日志事件的方法(包括命名空间和类名),以及所在的源文件和行号。 警告:会影响性能。没有pdb文件的话,只有方法名,没有源文件名和行号。 |
level |
日志事件等级 |
line |
引发日志事件的行号 警告:会影响性能。 |
logger |
记录日志事件的Logger对象的名字。 可以使用精度说明符控制Logger的名字的输出层级,默认输出全名。 注意,精度符的控制是从右开始的。例如:logger 名为 "a.b.c", 输出模型为 %logger{2} ,将输出"b.c"。 |
m | 等价于 message |
M | 等价于 method |
message |
由应用程序提供给日志事件的消息。 |
mdc |
MDC (旧为:ThreadContext.Properties) 现在是事件属性的一部分。 保留它是为了兼容性,它等价于 property。 |
method |
发生日志请求的方法名(只有方法名而已)。 警告:会影响性能。 |
n | 等价于 newline |
newline |
换行符 |
ndc |
NDC (nested diagnostic context) |
p | 等价于 level |
P | 等价于 property |
properties | 等价于 property |
property |
输出事件的特殊属性。例如: %property{user} 输出user属性。属性是由loggers或appenders添加到时间中的。 有一个默认的属性"DE<log4net:HostName"总是会有。DE< %property将输出所以的属性 。 (我除了知道可以用它获得主机名外,还不知道怎么用。) |
r | 等价于 timestamp |
t | 等价于 thread |
timestamp |
从程序启动到事件发生所经过的毫秒数。 |
thread |
引发日志事件的线程,如果没有线程名就使用线程号。 |
type |
引发日志请求的类的全名。. 可以使用精度控制符。例如: 类名是 "log4net.Layout.PatternLayout", 格式模型是 %type{1} 将输出"PatternLayout"。(也是从右开始的。) 警告:会影响性能。 |
u | 等价于 identity |
username |
当前用户的WindowsIdentity。(类似:HostName\Username) 警告:会影响性能。 |
utcdate |
发生日志事件的UTC时间。DE<后面还可以跟一个日期格式,用大括号括起来。DE<例如:%utcdate{HH:mm:ss,fff}或者%utcdate{dd MMM yyyy HH:mm:ss,fff}。如果utcdate后面什么也不跟,将使用ISO8601 格式 。 日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。 另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 AbsoluteTimeDateFormatter, DateTimeDateFormatter和Iso8601DateFormatter。例如: %date{ISO8601}或%date{ABSOLUTE}。 它们的性能要好于ToString。 |
w | 等价于 username |
x | 等价于 ndc |
X | 等价于 mdc |
% |
%%输出一个百分号 |
参考文档:
http://peibing211.blog.163.com/blog/static/37116360200992811595469/
本文博客园地址:http://www.cnblogs.com/struggle999/p/7111436.html |
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。
Log4Net不同日志类型写入到不同文件的更多相关文章
- log4net根据日志类型写入到不同的文件中
<?xml version="1.0"?> <configuration> <configSections> <!--log4net配置安 ...
- net core中动态给log4net添加日志类型
private static object m_Lock = new object(); /// <summary> /// 根据类型获取对应的日志操作类 /// </summary ...
- Log4net 根据日志类型输出日志
第一步:引入Log4net.dll 文件的引用 第二步:添加LogHelper类,代码如下 using System; using System.Collections.Generic; using ...
- C# Log4net根据日志等级输出到不同文件
原文地址: Log4Net.Config <?xml version="1.0" encoding="utf-8"?> <configurat ...
- Log4net根据日志等级输出到不同文件
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...
- 【改进】用Log4net建立日志记录
上一篇随笔中只使用了普通的文件读写来进行日志的写入,正如很多朋友说的,频繁的对文件进行读写会造成很多的问题,代码缺少边界控制和操作控制,没有对资源进行管理,是非常典型的bad code. 然后经过前辈 ...
- Python--logging模块不同级别写入到不同文件
将不同级别的logging 日志信息写入到不同文件 # -*- coding: utf-8 -*- import os import time import logging import inspec ...
- 【5】基于Log4Net的日志系统
阅读目录 日志系统应具备的特性 Log4Net 配置文件:log4net.config 初始化 输出信息 对Log4Net的封装 log4net.config复杂配置 不管是Web应用程序还是W ...
- ASP.NET Log4Net日志的配置及使用,文件写入
Log4net是Apache log4j框架在Microsort.NET平台实现的框架. 帮助程序员将日志信息输出到各种目标(控制台,数据库,文件等) 1.新建一个ASP.NET项目 2.新建一个 l ...
随机推荐
- MyBatis之级联——一对多关系
上次我们讲到了MyBatis的一对一关系的表示,简单回顾一下一对一关系就是一个学生只有一个学生证.那么什么是一对多关系呢?一个学生有多个课程这就是一对多的关系.我们结合上一章中的学生和学生证,在此基础 ...
- javaWeb学习总结(1)- Tomcat服务器学习和使用(2)
一.Tomcat服务器端口的配置 Tomcat的所有配置都放在conf文件夹之中,里面的server.xml文件是配置的核心文件. 如果想修改Tomcat服务器的启动端口,则可以在server.xml ...
- Java类加载器详解
title: Java类加载器详解date: 2015-10-20 18:16:52tags: JVM--- ## JVM三种类型的类加载器- 我们首先看一下JVM预定义的三种类型类加载器,当一个 J ...
- stm32之IIC通信协议
I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备. 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数 ...
- SpringMVC实现账号只能在一处登陆
一.问题引导 在Web开发中,实现一个账号只能在一处登陆有两种形式:1.当某个账号在某处登陆后,如果再在其他处登陆,将前一个账号挤掉:2.当某个账号登陆后,此账号在其他设备登陆提示已经登陆,无法登陆. ...
- firstChild,lastChild,nextSibling,previousSibling & 兼容性写法
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue2入坑随记(二) -- 自定义动态组件
学习了Vue全家桶和一些UI基本够用了,但是用元素的方式使用组件还是不够灵活,比如我们需要通过js代码直接调用组件,而不是每次在页面上通过属性去控制组件的表现.下面讲一下如何定义动态组件. Vue.e ...
- jQuery链式操作如何返回上一级DOM
有时候我们在链式操作的时候,选择到了其他的DOM进行操作,如何再返回先前的dom呢,有一下几个方法,end(); addBack(); add(); 使用形式 $("#divFather&q ...
- Python初探
Q:DBA是运维数据库,为什么还要懂开发? A: 维护:维护的机器太多了,很多重复的操作,需要开发出工具来实现 监控:所有机器的运行情况和健康状况都需要了解,全盘掌握cup.内存.磁盘.网络流量.数据 ...
- 初识Tensorboard
1.什么是Tensorboard? PPT设计原则中有这样一条,叫"文不如表,表不如图",可见图表在表达中更为直观.明确.程序设计中也是一样,我们经常用图表来描述程序的结构和流程, ...