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&quot;.log&quot;" />
<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&quot;.log&quot;" />
<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&quot;.log&quot;" />
<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&quot;.log&quot;" />
<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"分别代表 AbsoluteTimeDateFormatterDateTimeDateFormatterIso8601DateFormatter。例如: %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"分别代表 AbsoluteTimeDateFormatterDateTimeDateFormatterIso8601DateFormatter。例如: %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不同日志类型写入到不同文件的更多相关文章

  1. log4net根据日志类型写入到不同的文件中

    <?xml version="1.0"?> <configuration> <configSections> <!--log4net配置安 ...

  2. net core中动态给log4net添加日志类型

    private static object m_Lock = new object(); /// <summary> /// 根据类型获取对应的日志操作类 /// </summary ...

  3. Log4net 根据日志类型输出日志

    第一步:引入Log4net.dll 文件的引用 第二步:添加LogHelper类,代码如下 using System; using System.Collections.Generic; using ...

  4. C# Log4net根据日志等级输出到不同文件

    原文地址: Log4Net.Config <?xml version="1.0" encoding="utf-8"?> <configurat ...

  5. Log4net根据日志等级输出到不同文件

    <?xml version="1.0" encoding="utf-8"?> <configuration> <configSec ...

  6. 【改进】用Log4net建立日志记录

    上一篇随笔中只使用了普通的文件读写来进行日志的写入,正如很多朋友说的,频繁的对文件进行读写会造成很多的问题,代码缺少边界控制和操作控制,没有对资源进行管理,是非常典型的bad code. 然后经过前辈 ...

  7. Python--logging模块不同级别写入到不同文件

    将不同级别的logging 日志信息写入到不同文件 # -*- coding: utf-8 -*- import os import time import logging import inspec ...

  8. 【5】基于Log4Net的日志系统

    阅读目录 日志系统应具备的特性  Log4Net 配置文件:log4net.config 初始化 输出信息 对Log4Net的封装 log4net.config复杂配置   不管是Web应用程序还是W ...

  9. ASP.NET Log4Net日志的配置及使用,文件写入

    Log4net是Apache log4j框架在Microsort.NET平台实现的框架. 帮助程序员将日志信息输出到各种目标(控制台,数据库,文件等) 1.新建一个ASP.NET项目 2.新建一个 l ...

随机推荐

  1. nodejs弯路-01之'express' 不是内部或外部命令

    最近正想用node+angular+mongodb来完成一个小项目,三样都算是从零开始学习吧. 一开始是想用express -e projectname去创建一个ejs模板的项目.(一两句话就可以把大 ...

  2. Python ORM框架之 Peewee入门

    之前在学Django时,发现它的模型层非常好用,把对数据库的操作映射成对类.对象的操作,避免了我们直接写在Web项目中SQL语句,当时想,如果这个模型层可以独立出来使用就好了,那我们平台操作数据库也可 ...

  3. win7电脑关机时间长怎么办

    最近遇到电脑关机慢的问题,其实电脑是装了ssd的,而且关掉了许多不需要的软件服务,为什么还是会出现关机慢的问题呢?开机是很快的. 所以我做了以下尝试: 1 win + r 运行 regedit 注册表 ...

  4. java面试集锦

    HashMap和HashTable的区别 他们都是Map接口的实现类,实现了将唯一键值映射到特定的值上. HashMap没有分类或者排序,它允许一个null和多个null值. HashTable类似于 ...

  5. html学习笔记 - table表格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. NodeJS 入门第二天(EJS模板)

    一.复习 复习:Node.js开发服务器,数据.路由.本地关心的效果,交互: Node.js实际上是极客开发出的一个小玩具,不是银弹.有着别人不具备的怪异特点: 单线程.Non-blocking I/ ...

  7. 使用公共 Registry - 每天5分钟玩转 Docker 容器技术(19)

    保存和分发镜像的最直接方法就是使用 Docker Hub. Docker Hub 是 Docker 公司维护的公共 Registry.用户可以将自己的镜像保存到 Docker Hub 免费的 repo ...

  8. 移动端web解决方案

    范畴 移动端web浏览器.至少需要适配的,UC,QQ,各手机内置浏览器,chrome,safari. 是不是觉得和PC端差不多?错了!每款同一版本ios的内置浏览器一样.但每款同一版本android的 ...

  9. 自己动手实现html去标签和文本提取

    随意观看 [TOC] 工具 python3.6 正则表达式(别的语言思路一样,容易借鉴) python正则表达式:flags的应用 这里主要介绍一下re.compile(pattern[, flags ...

  10. Java之JSON数据

    特别注意:使用JSON前需要导包 操作步骤地址:http://blog.csdn.net/baidu_37107022/article/details/70876993 1.定义 JSON(JavaS ...