ibcadmin 发表于 2019-9-12 16:21:46

(转载)非常完善的Log4net配置详细说明

<h2>一、媒介</h2>
<p>在项目中,对项目标日志网络是非常紧张的,这里我就说说代码的异常日志网络。网络异常日志,有很多第三方成熟的框架,我这里就介绍一下我常用的Log4net。</p>
<h3>Log4Net介绍</h3>
<p>Log4net 是 Apache 下一款非常闻名的基于.net开辟的记录日志开源组件,它是Log4j 的一个克隆版。Log4net记录日志的功能非常强盛。它可以将日志分差异的品级,比差异的样式,将日志输出到差异的媒介,并且可以进行扩展。</p>
<p>官方地点:https://logging.apache.org/log4net/</p>
<h2>二、设置说明</h2>
<p>关于Log4Net的设置介绍,园子内里有很多介绍,我看过一篇我到现在为止,介绍得最最详细的博文,这里我就直接转过来了,由于我自以为也写不出更加详细的设置说明,转载过来的另有一个目标,就是为了防备博主删博文,之前就碰到过,博主不知道是删了还是搬家了,收藏的博文就404了。</p>
<p>这里我根据实际利用情况,只转载了一些紧张的设置说明,如果园友想看全文,毗连地点:https://www.cnblogs.com/lzrabbit/archive/2012/03/23/2413180.html</p>
<p>这篇文章写了有几年了,估计Log4Net的设置情势有些修改,园友利用时可以本身调解。</p>
<h3>1、Log4net的重要构成部门</h3>
<h3>1.1 Appenders</h3>
<p>Appenders用来定义日志的输出方式,即日志要写到那种介质上去。较常用的Log4net已经实现好了,直接在设置文件中调用即可,可拜见上面设置文件例子;固然也可以本身写一个,必要从log4net.Appender.AppenderSkeleton类继续。它还可以通过设置Filters和Layout来实现日志的过滤和输特别式。</p>
<p>AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。<br />
AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。<br />
AspNetTraceAppender能用asp.net中Trace的方式检察记录的日志。<br />
BufferingForwardingAppender 在输出到子Appenders之前先缓存日志变乱。<br />
ConsoleAppender 将日志输出到应用步调控制台。<br />
EventLogAppender 将日志写到Windows Event Log。<br />
FileAppender 将日志输出到文件。<br />
ForwardingAppender 发送日志变乱到子Appenders。<br />
LocalSyslogAppender 将日志写到local syslog service (仅用于UNIX环境下)。<br />
MemoryAppender 将日志存到内存缓冲区。<br />
NetSendAppender 将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中表现。<br />
OutputDebugStringAppender 将日志输出到Debuger,如果步调没有Debuger,就输出到体系Debuger。如果体系Debuger也不可用,将忽略消息。<br />
RemoteSyslogAppender 通过UDP网络协议将日志写到Remote syslog service。<br />
RemotingAppender 通过.NET Remoting将日志写到远程接收端。<br />
RollingFileAppender 将日志以回滚文件的情势写到文件中。<br />
SmtpAppender 将日志写到邮件中。<br />
SmtpPickupDirAppender 将消息以文件的方式放入一个目次中,像IIS SMTP agent这样的SMTP署理就可以阅读或发送它们。<br />
TelnetAppender 客户端通过Telnet来担当日志变乱。<br />
TraceAppender 将日志写到.NET trace 体系。<br />
UdpAppender 将日志以无毗连UDP数据报的情势送到远程宿主或用UdpClient的情势广播。</p>
<h3>1.2、Filters</h3>
<p>利用过滤器可以过滤掉Appender输出的内容。过滤器通常有以下几种:<br />
DenyAllFilter 阻止所有的日志变乱被记录<br />
LevelMatchFilter 只有指定品级的日志变乱才被记录<br />
LevelRangeFilter 日志品级在指定范围内的变乱才被记录<br />
LoggerMatchFilter 与Logger名称匹配,才记录<br />
PropertyFilter 消息匹配指定的属性值时才被记录<br />
StringMathFilter 消息匹配指定的字符串才被记录</p>
<h3>1.3、Layouts</h3>
<p>Layout用于控制Appender的输特别式,可以是线性的也可以是XML。<br />
一个Appender只能有一个Layout。<br />
最常用的Layout应该是经典格式的PatternLayout,其次是SimpleLayout,RawTimeStampLayout和ExceptionLayout。然后另有IRawLayout,XMLLayout等几个,利用较少。Layout可以本身实现,必要从log4net.Layout.LayoutSkeleton类继续,来输出一些特殊必要的格式,在背面扩展时就重新实现了一个Layout。<br />
SimpleLayout简单输特别式,只输出日志级别与消息内容。<br />
RawTimeStampLayout 用来格式化时间,在向数据库输出时会用到。样式如“yyyy-MM-dd HH:mm:ss“<br />
ExceptionLayout必要给Logger的方法传入Exception对象作为参数才起作用,否则就什么也不输出。输出的时间会包含Message和Trace。<br />
PatterLayout利用最多的一个Layout,能输出的信息很多,利用方式可拜见上面例子中的设置文件。PatterLayout的格式化字符串见文后 <strong>三、附注</strong>。</p>
<h3>1.4、Loggers</h3>
<p>Logger是直接和应用步调交互的组件。Logger只是产生日志,然后由它引用的Appender记录到指定的媒介,并由Layout控制输特别式。<br />
Logger提供了多种方式来记录一个日志消息,也可以有多个Logger同时存在。每个实例化的Logger对象对被log4net作为命名实体(Named Entity)来维护。log4net利用继续体系,也就是说如果存在两个Logger,名字分别为a.b.c和a.b。那么a.b就是a.b.c的祖先。每个Logger都继续了它祖先的属性。所有的Logger都从Root继续,Root本身也是一个Logger。<br />
日志的品级,它们由高到底分别为:OFF > FATAL > ERROR > WARN > INFO > DEBUG> ALL <br />
高于品级设定值方法(怎样设置拜见“设置文件详解”)都能写入日志, Off所有的写入方法都不写到日志里,ALL则相反。比方当我们设成Info时,logger.Debug就会被忽略而不写入文件,但是FATAL,ERROR,WARN,INFO会被写入,由于他们品级高于INFO。</p>
<p>在具体写日志时,一样平常可以这样明白日志品级:<br />
FATAL(致命错误):记录体系中出现的能利用体系完全失去功能,服务停止,体系崩溃等使体系无法继续运行下去的错误。比方,数据库无法毗连,体系出现死循环。<br />
ERROR(一样平常错误):记录体系中出现的导致体系不稳定,部门功能出现混乱或部门功能失效一类的错误。比方,数据字段为空,数据操纵不可完成,操纵出现异常等。<br />
WARN(告诫):记录体系中不影响体系继续运行,但不符合体系运行正常条件,有可能引起体系错误的信息。比方,记录内容为空,数据内容不正确等。<br />
INFO(一样平常信息):记录体系运行中应该让用户知道的基本信息。比方,服务开始运行,功能已经开户等。<br />
DEBUG (调试信息):记录体系用于调试的齐备信息,内容大概是一些关键数据内容的输出。</p>
<p><br />
Logger实现的ILog接口,ILog定义了5个方法(Debug,Inof,Warn,Error,Fatal)分别对差异的日志品级记录日志。这5个方法另有5个重载。以Debug为例说明一下,其它的和它差不多。<br />
ILog中对Debug方法的定义如下:</p>

void Debug(object message);
void Debug(object message, Exception ex);

<p>另有一个布尔属性:</p>

bool IsDebugEnabled { get; }

<p>如果利用Debug(object message, Exception ex),则无论Layout中是否定义了%exception,默认设置下日志都会输出Exception。包罗Exception的Message和Trace。如果利用Debug(object message),则日志是不会输出Exception。<br />
末了还要说一个LogManager的类,它用来管理所有的Logger。它的GetLogger静态方法,可以获得设置文件中相应的Logger:</p>

log4net.ILog log = log4net.LogManager.GetLogger("logger-name");

<h3>1.5、Object Renders</h3>
<p>它将告诉logger怎样把一个对象转化为一个字符串记录到日志里。(ILog中定义的接口接收的参数是Object,而不是String。)<br />
比方你想把Orange对象记录到日志中,但此时logger只会调用Orange默认的ToString方法而已。以是要定义一个OrangeRender类实现log4net.ObjectRender.IObjectRender接口,然后注册它(我们在本文中的扩展不利用这种方法,而是直接实现一个自定义的Layout)。这时logger就会知道怎样把Orange记录到日志中了。</p>
<h3>1.6、Repository</h3>
<p>Repository重要用于日志对象组织结构的维护<br />
</p>
<h3>2、设置文件详解</h3>
<h3>2.1、设置文件构成</h3>
<p>重要有两大部门:<br />
一是申明一个名为“log4net“的自定义设置节,如下所示:</p>

<configSections>
   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>

<p>二是<log4net>节的具体设置,这是下面要重点说明的。</p>
<h3>2.1.1、log4net</h3>
<p>所有的设置都要在<log4net>元素里定义。<br />
支持的属性:</p>
<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; text-align: left; text-transform: none; line-height: normal; text-indent: 0px; letter-spacing: normal; overflow: visible; word-spacing: 0px; display: table; white-space: normal; border-collapse: collapse; orphans: 2; widows: 2; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">debug</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">可选,取值是true或false,默认是false。设置为true,开启log4net的内部调试。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">update</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">可选,取值是Merge(归并)或Overwrite(覆盖),默认值是Merge。设置为Overwrite,在提交设置的时间会重置已经设置过的库。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">threshold</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">可选,取值是repository(库)中注册的level,默认值是ALL。</p>

</td>

</tr>

</tbody>

</table>
<p>支持的子元素:</p>
<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; text-align: left; text-transform: none; line-height: normal; text-indent: 0px; letter-spacing: normal; overflow: visible; word-spacing: 0px; display: table; white-space: normal; border-collapse: collapse; orphans: 2; widows: 2; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">appender</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0或多个</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">logger</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0或多个</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">renderer</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0或多个</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">root</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">最多一个</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">param</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0或多个</p>

</td>

</tr>

</tbody>

</table>
<h3>2.1.2、root</h3>
<p>实际上就是一个根logger,所有其它logger都默认继续它,如果设置文件里没有显式定义,则框架利用根日志中定义的属性。root元素没有属性。</p>
<p>支持的子元素:</p>
<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; text-align: left; text-transform: none; line-height: normal; text-indent: 0px; letter-spacing: normal; overflow: visible; word-spacing: 0px; display: table; white-space: normal; border-collapse: collapse; orphans: 2; widows: 2; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">appender-ref</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个,要引用的appender的名字。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">level</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">最多一个。 只有在这个级别或之上的变乱才会被记录。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">param</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个, 设置一些参数。</p>

</td>

</tr>

</tbody>

</table>
<h3>2.1.3、logger</h3>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的属性:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">name</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">必须的,logger的名称</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">additivity</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">可选,取值是true或false,默认值是true。设置为false时将阻止父logger中的appender。</p>

</td>

</tr>

</tbody>

</table>


<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的子元素:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">appender-ref</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个,要引用的appender的名字。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">level</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">最多一个。 只有在这个级别或之上的变乱才会被记录。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">param</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个, 设置一些参数。</p>

</td>

</tr>

</tbody>

</table>


<h3>2.1.4、appender</h3>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">定义日志的输出方式,只能作为 log4net 的子元素。name属性必须唯一,type属性必须指定。</p>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的属性:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">name</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">必须的,Appender对象的名称</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">type</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">必须的,Appender对象的输出范例</p>

</td>

</tr>

</tbody>

</table>


<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的子元素:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">appender-ref</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个,允许此appender引用其他appender,并不是以是appender范例都支持。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">filter</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个,定义此app利用的过滤器。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">layout</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">最多一个。定义appender利用的输特别式。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">param</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个, 设置Appender类中对应的属性的值。</p>

</td>

</tr>

</tbody>

</table>


<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">实际上<appender>所能包含的子元素远不止上面4个。</p>
<h3>2.1.5、layout</h3>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">结构,只能作为<appender>的子元素。</p>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的属性:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">type</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">必须的,Layout的范例</p>

</td>

</tr>

</tbody>

</table>


<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的子元素:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">param</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个, 设置一些参数。</p>

</td>

</tr>

</tbody>

</table>


<h3>2.1.6、filter</h3>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">过滤器,只能作为<appender>的子元素。</p>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的属性:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">type</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">必须的,Filter的范例</p>

</td>

</tr>

</tbody>

</table>


<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的子元素:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">param</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个, 设置一些参数。</p>

</td>

</tr>

</tbody>

</table>


<h3>2.1.7、param</h3>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left"><param>元素可以是任何元素的子元素。</p>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的属性:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">name</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">必须的,取值是父对象的参数名。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">value</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">可选的,value和type中,必须有一个属性被指定。value是一个能被转化为参数值的字符串。</p>

</td>

</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="121">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">type</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">可选的,value和type中,必须有一个属性被指定。type是一个范例名,如果type不是在log4net步调集中定义的,就必要利用全名。</p>

</td>

</tr>

</tbody>

</table>


<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0.1pt; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">支持的子元素:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 624px;" border="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" width="120">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">param</p>

</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-indent: 0.1pt;">0个或多个, 设置一些参数。</p>

</td>

</tr>

</tbody>

</table>


<h3>2.2、appender设置</h3>
<p> <appender>在设置文件中至少有一个,也可以有多个,有些<appender>范例还可以引用其他<appender>范例,具体参数可拜见上表。<br />
下面只对写入回滚文件与输出到数据库(这里利用SQL数据库)设置领会说一下,其他设置可参考官方网站:http://logging.apache.org/log4net/release/config-examples.html</p>
<h3>2.2.1、写入回滚文件</h3>
<p>下面就是根据我本身的实际情况,设置的我的设置</p>
<div align="center"></div><div align="center"></div>

<log4net debug="false">
    <root>
      <level value="ALL" />
    </root>

    <logger name="PFTLog">
      <level value="DEBUG"/>
      <appender-ref ref="ErrorRollingFileAppender" />
      <appender-ref ref="DebugRollingFileAppender" />
      <appender-ref ref="InfoRollingFileAppender" />
    </logger>

    <!--数据日志-->
    <appender name="InfoRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
      <file value="LogFile\Info\" />
      <appendToFile value="true" />
      <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <Encoding value="UTF-8" />
      <!--最多产生的日志文件数,高出则只保存最新的n个。设定值value="-1"为不限文件数-->
      <MaxSizeRollBackups value="20" />
      <!--是否只写到一个文件中-->
      <StaticLogFileName value="false" />
      <!--按照何种方式产生多个日志文件(日期,文件巨细,混合)-->
      <rollingStyle value="Composite" />
      <!--按日期产生文件夹和文件名[在日期方式与混合方式下利用]-->
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <datePattern value="yyyyMMdd-&quot;-Info.log&quot;" />
      <!--每个文件的巨细。
      只在混合方式与文件巨细方式下利用。
      超出巨细后在所有文件名后自动增长正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。
      不要利用小数,否则会一直写入当前日志-->
      <maximumFileSize value="1MB" />
      <!--计数范例为1,2,3…-->
      <!--<CountDirection value="1" />-->
      <!--记录的格式。一样平常用log4net.Layout.PatternLayout结构-->
      <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%n记录时间:%date %n线程ID[%thread]
                           %n日志级别:%-5level %n记录类:%logger %n扩展信息:%property
                           -%n异常:%exception %n错误描述:%message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="INFO" />
      <param name="LevelMax" value="INFO" />
      </filter>
    </appender>

    <!--错误日志-->
    <appender name="ErrorRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
      <file value="LogFile\Error\" />
      <appendToFile value="true" />
      <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <Encoding value="UTF-8" />
      <!--最多产生的日志文件数,高出则只保存最新的n个。设定值value="-1"为不限文件数-->
      <MaxSizeRollBackups value="20" />
      <!--是否只写到一个文件中-->
      <StaticLogFileName value="false" />
      <!--按照何种方式产生多个日志文件(日期,文件巨细,混合)-->
      <rollingStyle value="Composite" />
      <!--按日期产生文件夹和文件名[在日期方式与混合方式下利用]-->
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <datePattern value="yyyyMMdd&quot;-Error.log&quot;" />
      <!--每个文件的巨细。
      只在混合方式与文件巨细方式下利用。
      超出巨细后在所有文件名后自动增长正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。
      不要利用小数,否则会一直写入当前日志-->
      <maximumFileSize value="1MB" />
      <!--计数范例为1,2,3…-->
      <!--<CountDirection value="1" />-->
      <!--记录的格式。一样平常用log4net.Layout.PatternLayout结构-->
      <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%n记录时间:%date %n线程ID[%thread]
                           %n日志级别:%-5level %n记录类:%logger %n扩展信息:%property
                           -%n异常:%exception %n错误描述:%message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="ERROR" />
      <param name="LevelMax" value="ERROR" />
      </filter>
    </appender>

    <!--调试日志-->
    <appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender" >
      <file value="LogFile\Debug\" />
      <appendToFile value="true" />
      <!--记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全-->
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <Encoding value="UTF-8" />
      <!--最多产生的日志文件数,高出则只保存最新的n个。设定值value="-1"为不限文件数-->
      <MaxSizeRollBackups value="20" />
      <!--是否只写到一个文件中-->
      <StaticLogFileName value="false" />
      <!--按照何种方式产生多个日志文件(日期,文件巨细,混合)-->
      <rollingStyle value="Composite" />
      <!--按日期产生文件夹和文件名[在日期方式与混合方式下利用]-->
      <!--这是按日期产生文件夹,并在文件名前也加上日期-->
      <datePattern value="yyyyMMdd&quot;-Debug.log&quot;" />
      <!--每个文件的巨细。
      只在混合方式与文件巨细方式下利用。
      超出巨细后在所有文件名后自动增长正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。
      不要利用小数,否则会一直写入当前日志-->
      <maximumFileSize value="1MB" />
      <!--计数范例为1,2,3…-->
      <!--<CountDirection value="1" />-->
      <!--记录的格式。一样平常用log4net.Layout.PatternLayout结构-->
      <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%n记录时间:%date %n线程ID[%thread]
                           %n日志级别:%-5level %n记录类:%logger %n扩展信息:%property
                           -%n异常:%exception %n错误描述:%message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
      <param name="LevelMin" value="DEBUG" />
      <param name="LevelMax" value="DEBUG" />
      </filter>
    </appender>

</log4net>

View Code
<p>注意这些设置属性有些是可选的,如果必要,一定要写正确,否则要么输出的不是本身想要的结果,要么干脆不输出任何信息。</p>
<p>由于我不会将日志直接写入数据库,以是这里我就不写了。</p>
<h3>2.3、logger设置</h3>
<p>在设置文件<appender>中的设置好了输出的介质,格式,过滤方式,还要定义日志对象<logger>。<br />
在框架的体系里,所有的日志对象都是根日志(root logger)的子女。 因此如果一个日志对象没有在设置文件里显式定义,则框架利用根日志中定义的属性。在<root>标签里,可以定义level级别值和Appender的列表。如果没有定义LEVEL的值,则缺省为DEBUG。可以通过<appender-ref>标签订义日志对象利用的Appender对象。<appender-ref>声明白在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继续父日志对象的Appender列表。这种缺省的举动方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。<br />
<root>不显式申明时利用默认的设置。我觉得在利用时不定义<root>,自定义多个<logger>,在步调中记录日志时直接利用<logger>的name来查找相应的<logger>,这样更灵活一些。比方:</p>
<div align="center"></div><div align="center"></div>

<!--同时写两个文件和数据库-->
<logger name="ReflectionLayout">
       <level value="DEBUG"/>
       <appender-ref ref="HashtableLayout"/>
       <appender-ref ref="ReflectionLayout"/>
       <appender-ref ref="ADONetAppender"/>
</logger>

View Code
<h3>2.4、关联设置文件</h3>
<p>log4net默认关联的是应用步调的设置文件App.config(BS步调是Web.config),可以利用步调集自定义属性来进行设置。下面来介绍一下这个自定义属性:<br />
log4net.Config.XmlConifguratorAttribute。</p>
<p>XmlConfiguratorAttribute有3个属性:<br />
ConfigFile: 设置文件的名字,文件路径相对于应用步调目次(AppDomain.CurrentDomain.BaseDirectory)。ConfigFile属性不能和ConfigFileExtension属性一起利用。<br />
ConfigFileExtension: 设置文件的扩展名,文件路径相对于应用步调的目次。ConfigFileExtension属性不能和ConfigFile属性一起利用。<br />
Watch: 如果将Watch属性设置为true,就会监督设置文件。当设置文件发生厘革的时间,就会重新加载。<br />
如果ConfigFile和ConfigFileExtension都没有设置,则利用应用步调的设置文件App.config(Web.config)。</p>
<p>可以在项目标AssemblyInfo.cs文件里添加以下的语句:<br /> </p>

//监督默认的设置文件,App.exe.config   


//监督设置文件,App.exe.log4net。


//利用设置文件log4net.config,不监督改变。注意log4net.config文件的目次,BS步调在站点目次//下,CS则在应用步调启动目次下,如调试时在/bin/Debug下,一样平常将文件属性的文件输出目次调为//始终复制即可


//利用设置文件log4net.config,不监督改变



<p>也可以在Global.asax的Application_Start里大概是Program.cs中的Main方法中添加,注意这里一定是绝对路径,如下所示:</p>

//这是在BS步调下,利用自定义的设置文件log4net.xml,利用Server.MapPath("~") + //@"/log4net.xml”来取得路径。/log4net.xml为相对于站点的路径

// ConfigureAndWatch()相称于Configure(Watch = true)
log4net.Config.XmlConfigurator.ConfigureAndWatch(
new System.IO.FileInfo(Server.MapPath("~") + @"/log4net.xml"));
//这是在CS步调下,可以用以下方法获得:
string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
string configFilePath = assemblyDirPath + " //log4net.xml";
log4net.Config.XmlConfigurator.ConfigureAndWatch(
new FileInfo(configFilePath));


<p>或直接利用绝对路径:</p>

//利用自定义的设置文件,直接绝对路径为:c:/log4net.config
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(@"c:/log4net.config"));

<h2>三、附注</h2>
<h3>PatterLayout格式化字符表</h3>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 622px;" border="1" cellspacing="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top" width="102">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;"><strong style="margin: 0px; padding: 0px;">转换字符</strong></p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top" width="516">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;" align="center"><strong style="margin: 0px; padding: 0px;">结果</strong></p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">a</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于appdomain</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">appdomain</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">引发日志变乱的应用步调域的友爱名称。(利用中一样平常是可实验文件的名字。)</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">c</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 logger</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">C</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 type</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">class</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 type</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">d</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 date</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">date</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">发生日志变乱的本地时间。 利用 DE>%utcdate 输出UTC时间。date背面还可以跟一个日期格式,用大括号括起来。DE>比方:%date{HH:mm:ss,fff}大概%date{dd MMM yyyy HH:mm:ss,fff}。如果date背面什么也不跟,将利用ISO8601 格式 。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">日期格式和.Net中DateTime类的ToString方法中利用的格式是一样。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">另外log4net另有3个本身的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 AbsoluteTimeDateFormatter, DateTimeDateFormatter和Iso8601DateFormatter。比方:%date{ISO8601}或%date{ABSOLUTE}。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">它们的性能要好于ToString。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">exception</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">异常信息</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">日志变乱中必须存了一个异常对象,如果日志变乱不包含没有异常对象,将什么也不输出。异常输出完毕后会跟一个换行。一样平常会在输出异常前加一个换行,并将异常放在末了。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">F</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 file</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">file</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">发生日志哀求的源代码文件的名字。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">告诫:只在调试的时间有效。调用本地信息会影响性能。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">identity</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">当前活动用户的名字(Principal.Identity.Name).</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">告诫:会影响性能。(我测试的时间%identity返回都是空的。)</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">l</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 location</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">L</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 line</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">location</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">引发日志变乱的方法(包罗命名空间和类名),以及地点的源文件和行号。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">告诫:会影响性能。没有pdb文件的话,只有方法名,没有源文件名和行号。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">level</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">日志变乱品级</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">line</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">引发日志变乱的行号</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">告诫:会影响性能。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">logger</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">记录日志变乱的Logger对象的名字。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">可以利用精度说明符控制Logger的名字的输出层级,默认输出全名。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">注意,精度符的控制是从右开始的。比方:logger 名为 "a.b.c", 输出模子为%logger{2} ,将输出"b.c"。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">m</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 message</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">M</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 method</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">message</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">由应用步调提供给日志变乱的消息。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">mdc</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">MDC (旧为:ThreadContext.Properties) 现在是变乱属性的一部门。 保存它是为了兼容性,它等价于 property。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">method</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">发生日志哀求的方法名(只有方法名而已)。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">告诫:会影响性能。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">n</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 newline</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">newline</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">换行符</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">ndc</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">NDC (nested diagnostic context)</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">p</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 level</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">P</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 property</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">properties</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 property</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">property</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">输出变乱的特殊属性。比方: %property{user} 输出user属性。属性是由loggers或appenders添加到时间中的。 有一个默认的属性"DE>log4net:HostName"总是会有。DE></p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">%property将输出所有的属性 。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">(扩展后可以利用)</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;"> </p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">r</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 timestamp</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">t</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 thread</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">timestamp</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">从步调启动到变乱发生所经过的毫秒数。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">thread</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">引发日志变乱的线程,如果没有线程名就利用线程号。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">type</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">引发日志哀求的类的全名。.</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">可以利用精度控制符。比方: 类名是 "log4net.Layout.<strong style="margin: 0px; padding: 0px;">PatternLayout</strong>", 格式模子是%type{1} 将输出"<strong style="margin: 0px; padding: 0px;">PatternLayout</strong>"。(也是从右开始的。)</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">告诫:会影响性能。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">u</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 identity</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">username</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">当前用户的WindowsIdentity。(雷同:HostName/Username)</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">告诫:会影响性能。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">utcdate</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">发生日志变乱的UTC时间。DE>背面还可以跟一个日期格式,用大括号括起来。DE>比方:%utcdate{HH:mm:ss,fff}大概%utcdate{dd MMM yyyy HH:mm:ss,fff}。如果utcdate背面什么也不跟,将利用ISO8601 格式 。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">日期格式和.Net中DateTime类的ToString方法中利用的格式是一样。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">另外log4net另有3个本身的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 AbsoluteTimeDateFormatter, DateTimeDateFormatter和Iso8601DateFormatter。比方:%date{ISO8601}或%date{ABSOLUTE}。</p>
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">它们的性能要好于ToString。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">w</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 username</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">x</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 ndc</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">X</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">等价于 mdc</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">%</p>
</td>
<td style="margin: 0px; padding: 0cm; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;" valign="top">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">%%输出一个百分号</p>
</td>
</tr>
</tbody>
</table>

<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">关于调用本地信息(caller location information)的说明:</p>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">%type %file %line %method %location %class %C %F %L %l %M 都会调用本地信息。这样做会影响性能。本地信息利用System.Diagnostics.StackTrace得到。.Net 1.0 不支持System.Diagnostics.StackTrace 类。</p>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">本地信息在调试模式下可以正常获取,在非调试模式下可能获取不到,或只能获取一部门。(根据我的测试,实在是必要有一个步调数据库(.pdb)文件。)</p>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">%property属性要用代码来设置才能利用(也就是扩展一下),</p>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">默认属性log4net:HostName不用设置。</p>
<p style="margin: 10px auto 10px 17.95pt; padding: 0px; text-transform: none; line-height: 26px; text-indent: 0px; letter-spacing: normal; word-spacing: 0px; white-space: normal; orphans: 2; widows: 2; background-color: #ffffff; font-variant-ligatures: normal; font-variant-caps: normal; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;" align="left">转义字符的修饰符:</p>

<table style="margin: 0px; padding: 0px; border: 1px solid #c0c0c0; overflow: visible; display: table; border-collapse: collapse; width: 622px;" border="1" cellspacing="0" cellpadding="0">
<tbody style="margin: 0px; padding: 0px;">
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">Format modifier</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">left justify</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">minimum width</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">maximum width</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">comment</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">%20logger</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">false</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">20</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">none</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">如果logger名不敷20个字符,就在左边补空格。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">%-20logger</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">true</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">20</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">none</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">如果logger名不敷20个字符,就在右边补空格。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">%.30logger</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">NA</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">none</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">30</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">高出30个字符将截断。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">%20.30logger</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">false</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">20</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">30</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">logger名要在20到30之间,少了在左边补空格,多了截断。</p>
</td>
</tr>
<tr style="margin: 0px; padding: 0px;">
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">%-20.30logger</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">true</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">20</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">30</p>
</td>
<td style="margin: 0px; padding: 0.75pt; border: 1px solid #c0c0c0; border-image: none; white-space: normal; border-collapse: collapse;">
<p style="margin: 10px auto; padding: 0px; text-indent: 0px;">logger名要在20到30之间,少了在右边补空格,多了截断。</p>
</td>
</tr>
</tbody>
</table>

<p> </p>
<h2>四、总结</h2>
<p>Log4Net的功能另有很多,比如他的扩展等,就不介绍了,由于一样平常的功能以及足够我们在平常的开辟过程中利用了,背面我将Log4Net日志记任命.Net实现方法分享出来。Log4Net还可以与其他软件结合,比如Kibana,而Kibana又能结合Elastic Search。在分布式的项目发布中,以及海量的日志查询中,服从是非常高的。</p>
<p>转载毗连:</p>
<p>https://www.cnblogs.com/lzrabbit/archive/2012/03/23/2413180.html</p><br><br/><br/><br/><br/><br/>来源:<a href="https://www.cnblogs.com/snailblog/p/11484027.html" target="_blank">https://www.cnblogs.com/snailblog/p/11484027.html</a>
页: [1]
查看完整版本: (转载)非常完善的Log4net配置详细说明