本文旨在介绍log4net相关节点的配置项,下一章会会详细讲解log4net在Asp.Net core中使用。
log4net 是Apache下的一个开源项目,可以控制日志信息的输出介质并定义了多种日志信息输出模式,可以根据需要将信息输出到控制台、文本文件、windows日志数据库、邮件等。
log4net的核心组件:Logger、Appender、Filter、Layout
节点配置:
name: required, loggger名称,在service通过指定logger name调用相应logger,如果配置多个Logger还可以使用Logger继承机制,比如parrent logger <Logger name="base"/>,sub logger inherit parent logger <Logger name="base.sub"/> 或者parent logger设置为<Root/> ,sub logger指定具体<Logger name="sub"/>
additivity: option, 默认true,设置false表示当前logger信息不会被记录到父logger中。
子元素:
level: OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
appender-ref: 0或者多个,要引用appender的名字,一个logger可以配置多个appender可以将日志信息输出到不同的介质中,比如consol,file
param: 0或多个设置一些配置
节点配置:
name: required, 与Logger 中appender-ref 相对应
type: appender 输出类型:
AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。
AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。
AspNetTraceAppender 能用asp.net中Trace的方式查看记录的日志。
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的形式广播。
节点配置:
type: 表示filter的类型
DenyAllFilter 阻止所有的日志事件被记录
LevelMatchFilter 只有指定等级的日志事件才被记录
LevelRangeFilter 日志等级在指定范围内的事件才被记录
LoggerMatchFilter Logger名称匹配,才记录
PropertyFilter 消息匹配指定的属性值时才被记录
StringMathFilter 消息匹配指定的字符串才被记录
MdcFilter
NdcFilter
Filter的工作原理:Filter是按顺序执行,如果满足上一个Filter,日志会输出; 如果不满足上一个filter则会继续匹配下一个Filter。
- Layout 用于控制Appender的输出格式,最常用应该是用户自定义的PatternLayout
Layout节点type属性:
ExceptionLayout 只呈现日志事件中异常的文本信息
PatternLayout 可以通过类型字符串来配置的布局
RawPropertyLayout 从日志事件中提取属性值
RawTimeStampLayout 从日志事件中提取日期
RawUtcTimeStampLayout 从日志事件中提取UTC日期
SimpleLayout 很简单的布局
XmlLayout 把日志事件格式化为XML元素的布局
PatternLayout的格式化字符串:
%m、%message 输出的日志消息
%d、%datetime 输出当前语句运行的时刻,格式%date{yyyy-MM-dd HH:mm:ss,fff}
%r、%timestamp 输出程序从运行到执行到当前语句时消耗的毫秒数
%p、%level 日志的当前优先级别
%c、%logger 当前日志对象的名称
%L、%line 输出语句所在的行号
%F、%file 输出语句所在的文件名,警告:只在调试的时候有效,调用本地信息会影响性能
%a、%appdomain 引发日志事件的应用程序域的名称。
%C、%class、%type 引发日志请求的类的全名,警告:会影响性能
%exception 异常信息
%u、%identity 当前活动用户的名字,我测试的时候%identity返回都是空的。警告:会影响性能
%l、%location 引发日志事件的名空间、类名、方法、行号。警告:会影响性能,依赖pdb文件
%M、%method 发生日志请求的方法名,警告:会影响性能
%n、%newline 换行符
%x、%ndc NDC(nested diagnostic context)
%X、%mdc、%P、%properties 等介于 %property
%property 输出{log4net:Identity=, log4net:UserName=, log4net:HostName=}
%t、%thread 引发日志事件的线程,如果没有线程名就使用线程号。
%w、%username 当前用户的WindowsIdentity,类似:HostName/Username。警告:会影响性能
%utcdate 发生日志事件的UTC时间。例如:%utcdate{HH:mm:ss,fff}
%% 输出一个百分号