Log4net之简介

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。Java平台下,它还有一个姐妹组件——log4j。

log4net.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。Java平台下,它还有一个姐妹组件——log4j

下载地址:http://logging.apache.org/log4net/download.html

(一)主要组成

Appenders(输出源)、

Filters(过滤器)、

Layouts(布局)、

Loggers(日志类别)和Object Renders(渲染器)。

(二)Appenders(输出源)

用来定义日志的输出方式,其中包括:

·AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。

·AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。

·AspNetTraceAppender  能用asp.netTrace的方式查看记录的日志。

·BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。

·ConsoleAppender 将日志输出到应用程序控制台。

·EventLogAppender 将日志写到Windows Event Log

·FileAppender 将日志输出到文件。

·ForwardingAppender 发送日志事件到子Appenders

·LocalSyslogAppender 将日志写到local syslog service (仅用于UNIX环境下)

·MemoryAppender 将日志存到内存缓冲区。

·NetSendAppender 将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

·OutputDebugStringAppender 将日志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可用,将忽略消息。

·RemoteSyslogAppender 通过UDP网络协议将日志写到Remote syslog service

·RemotingAppender 通过.NET Remoting将日志写到远程接收端。

·RollingFileAppender 将日志以回滚文件的形式写到文件中。

·SmtpAppender 将日志写到邮件中。

·SmtpPickupDirAppender 将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。

·TelnetAppender 客户端通过Telnet来接受日志事件。

·TraceAppender 将日志写到.NET trace 系统。

·UdpAppender 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。

 

(三)Filter(过滤器)

用来过滤输出源输出的内容,其中包括:

·DenyAllFilter 阻止所有的日志事件被记录

·LevelMatchFilter 只有指定等级的日志事件才被记录

·LevelRangeFilter 日志等级在指定范围内的事件才被记录

·LoggerMatchFilter Logger名称匹配,才记录

·PropertyFilter 消息匹配指定的属性值时才被记录

·StringMathFilter 消息匹配指定的字符串才被记录

(四)Layout(布局)

用来控制输出源输出内容的输出格式(一个输出源只带有一个布局)

最常用的Layout应该是用户自定义格式的PatternLayout,其次是SimpleLayoutExceptionLayout。然后还有4Layout,其中有两个是输出XmlLayout,但是中文会有问题。

ExceptionLayout需要给Logger的方法传入Exception对象作为参数才起作用,否则就什么也不输出。输出的时候会包含MessageTrace

 

Conversion Pattern Name

Effect

a

等价于appdomain

appdomain

引发日志事件的应用程序域的友好名称。(我在使用中一般是可执行文件的名字。)

c

等价于 logger

C

等价于 type

class

等价于 type

d

等价于 date

date

发生日志事件的本地时间。 使用 %utcdate 输出UTC时间。date后面还可以跟一个日期格式,用大括号括起来。例如:%date{HH:mm:ss,fff}或者%date{dd MMM yyyy HH:mm:ss,fff}。如果date后面什么也不跟,将使用ISO8601 格式

日期格式和.NetDateTime类的ToString方法中使用的格式是一样。

另外log4net还有3个自己的格式Formatter 它们是 "ABSOLUTE", "DATE""ISO8601"分别代表 AbsoluteTimeDateFormatter, DateTimeDateFormatterIso8601DateFormatter。例如: %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属性。属性是由loggersappenders添加到时间中的。 有一个默认的属性"log4net:HostName"总是会有。

%property将输出所以的属性

(我除了知道可以用它获得主机名外,还不知道怎么用。)

 

r

等价于 timestamp

t

等价于 thread

timestamp

从程序启动到事件发生所经过的毫秒数。

thread

引发日志事件的线程,如果没有线程名就使用线程号。

type

引发日志请求的类的全名。.

可以使用精度控制符。例如: 类名是 "log4net.Layout.PatternLayout", 格式模型是 %type{1} 将输出"PatternLayout"。(也是从右开始的。)

警告:会影响性能。

u

等价于 identity

username

当前用户的WindowsIdentity。(类似:HostName\Username

警告:会影响性能。

utcdate

发生日志事件的UTC时间。后面还可以跟一个日期格式,用大括号括起来。例如:%utcdate{HH:mm:ss,fff}或者%utcdate{dd MMM yyyy HH:mm:ss,fff}。如果utcdate后面什么也不跟,将使用ISO8601 格式

日期格式和.NetDateTime类的ToString方法中使用的格式是一样。

另外log4net还有3个自己的格式Formatter 它们是 "ABSOLUTE", "DATE""ISO8601"分别代表 AbsoluteTimeDateFormatter, DateTimeDateFormatterIso8601DateFormatter。例如: %date{ISO8601}%date{ABSOLUTE}

它们的性能要好于ToString

w

等价于 username

x

等价于 ndc

X

等价于 mdc

%

%%输出一个百分号

 

转义字符的修饰符:

Format modifier

left justify

minimum width

maximum width

comment

%20logger

false

20

none

如果logger名不足20个字符,就在左边补空格。

%-20logger

true

20

none

如果logger名不足20个字符,就在右边补空格。

%.30logger

NA

none

30

超过30个字符将截断。

%20.30logger

false

20

30

logger名要在2030之间,少了在左边补空格,多了截断。

%-20.30logger

true

20

30

logger名要在2030之间,少了在右边补空格,多了截断。

 

(五) Loggers

直接和应用程序交互的组件。Logger只是产生日志,然后由它引用的Appender记录到指定的媒介,并由Layout控制输出格式。

Logger提供了多种方式来记录一个日志消息,也可以有多个Logger同时存在。每个实例化的Logger对象对被log4net作为命名实体(Named Entity)来维护。log4net使用继承体系,也就是说假如存在两个Logger,名字分别为a.b.ca.b。那么a.b就是a.b.c的祖先。每个Logger都继承了它祖先的属性。

 

级别

允许的方法

Boolean属性

优先级别

OFF

 

 

Highest

FATAL

void Fatal(...);

bool IsFatalEnabled;

 

RROR

void Error(...);

bool IsErrorEnabled;

 

WARN

void Warn(...);

bool IsWarnEnabled;

 

INFO

void Info(...);

bool IsInfoEnabled;

 

DEBUG

void Debug(...);

bool IsDebugEnabled;

 

ALL

 

 

Lowest

 

其中OFF表示停用所以日志记录,ALL表示所有日志都可以记录。

(六)Object Renders(渲染器)

按照用户定义的标准输出日志消息。Object Renders必须实现log4net.ObjectRenderer.IObjectRenerer接口。

 

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
5月前
|
XML 机器学习/深度学习 移动开发
技术笔记:log4net使用详解
技术笔记:log4net使用详解
106 0
|
数据库
.NetCore 中使用Log4Net
.NetCore 中使用Log4Net
|
监控 C#
VS2012 C#使用/配置Log4Net
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来。 十年河东十年河西,莫欺少年穷 学无止境,精益求精   本节探讨如何在VS2012中使用Log4Net 1、首先在项目中添加Nuget程序包.
1564 0
|
SQL 数据库 数据库管理
|
数据库管理 关系型数据库 数据格式
|
监控 关系型数据库 Java