1,写log之前一定要初始化配置文档,相关代码如下:
1 |
log4net.Config.XmlConfigurator.Configure(); //默认的
|
2 |
3 |
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(System.Web.HttpContext.Current.Server.MapPath("../Log4Net.config")));
|
1 |
|
2.配置文件样本
01 |
Log4net.config配置文件的内容: |
02 |
<?xml version="1.0" encoding="utf-8"?>
|
03 |
<log4net>
|
04 |
<logger name="KangarooLog">
|
05 |
<!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF-->
|
06 |
<!--如果没有定义LEVEL的值,则缺省为DEBUG-->
|
07 |
<level value="ALL" />
|
08 |
<!--<appender-ref ref="SmtpAppenderKangaroo"></appender-ref>-->
|
09 |
<appender-ref ref="FileAppenderKangaroo"></appender-ref>
|
10 |
</logger>
|
11 |
<appender name="SmtpAppenderKangaroo" type="log4net.Appender.SmtpAppender">
|
12 |
<to value="Kangaroo@800best.com"></to>
|
13 |
<from value="Kangaroo@800best.com" />
|
14 |
<subject value="Kangaroo Log Message" />
|
15 |
<smtpHost value="smtp.800best.com" />
|
16 |
<username value="Kangaroo" />
|
17 |
<password value="Kangaroo" />
|
18 |
<bufferSize value="2048" />
|
19 |
<!--超长部分是否丢弃-->
|
20 |
<lossy value="false" />
|
21 |
<!--evaluator时好时坏,靠不住,还是用filter实在-->
|
22 |
<!--<evaluator type="log4net.Core.LevelEvaluator">
|
23 |
<threshold value="ERROR"/>
|
24 |
</evaluator>-->
|
25 |
<!--<evaluator type="log4net.Core.LevelEvaluator,log4net">
|
26 |
<threshold value="WARN" />
|
27 |
</evaluator>-->
|
28 |
<!--将导致不能写日志-->
|
29 |
<!--<filter type="log4net.Filter.DenyAllFilter" />-->
|
30 |
<!--输出级别在定义之间的日志-->
|
31 |
<filter type="log4net.Filter.LevelRangeFilter">
|
32 |
<param name="LevelMin" value="ALL" />
|
33 |
<param name="LevelMax" value="OFF" />
|
34 |
</filter>
|
35 |
<layout type="log4net.Layout.PatternLayout">
|
36 |
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] : %newline%message%newline" />
|
37 |
</layout>
|
38 |
</appender>
|
39 |
|
40 |
<appender name="FileAppenderKangaroo" type="log4net.Appender.RollingFileAppender">
|
41 |
<!--绝对路径-->
|
42 |
<!--<file value="D:\KangarooLog.txt"></file>-->
|
43 |
<param name="File" value="./Log/KangarooLog.log" />
|
44 |
<param name="AppendToFile" value="true" />
|
45 |
<!--相对路径,在项目的根目录下-->
|
46 |
<!--以最后一个路径为准,所以上面的绝对路径下不会写日志-->
|
47 |
<!--<file value="./Log/Kangaroo.txt"></file>-->
|
48 |
<!--防止多线程时不能写Log,官方说线程非安全-->
|
49 |
<!--实际使用时,本地测试正常,部署后有不能写日志的情况-->
|
50 |
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
|
51 |
<appendToFile value="true" />
|
52 |
<!--可以为:Once|Size|Date|Composite-->
|
53 |
<!--Composite为Size和Date的组合-->
|
54 |
<rollingStyle value="composite" />
|
55 |
<!--日志最大个数,都是最新的-->
|
56 |
<!--rollingStyle节点为Date时,该节点不起作用-->
|
57 |
<!--rollingStyle节点为Size时,只能有value个日志-->
|
58 |
<!--rollingStyle节点为Composite时,每天有value个日志-->
|
59 |
<maxSizeRollBackups value="10" />
|
60 |
<!--当备份文件时,为文件名加的后缀-->
|
61 |
<!--后缀为*.txt时,例:AX.txt_2008-07-24.PxP 应该是程序上的一个bug-->
|
62 |
<!--后缀为*.TXT时,例:AX.txt_2008-07-25.TXT-->
|
63 |
<datePattern value="_yyyy-MM-dd.TXT" />
|
64 |
<!--可用的单位:KB|MB|GB-->
|
65 |
<!--不要使用小数,否则会一直写入当前日志-->
|
66 |
<maximumFileSize value="2MB" />
|
67 |
<!--置为true,当前最新日志文件名永远为file节中的名字-->
|
68 |
<staticLogFileName value="true" />
|
69 |
<!--输出级别在INFO和ERROR之间的日志-->
|
70 |
<filter type="log4net.Filter.LevelRangeFilter">
|
71 |
<param name="LevelMin" value="INFO" />
|
72 |
<param name="LevelMax" value="ERROR" />
|
73 |
</filter>
|
74 |
<!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出-->
|
75 |
<filter type="log4net.Filter.LevelMatchFilter">
|
76 |
<param name="LevelToMatch" value="WARN" />
|
77 |
</filter>
|
78 |
<filter type="log4net.Filter.DenyAllFilter" />
|
79 |
<layout type="log4net.Layout.PatternLayout">
|
80 |
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
|
81 |
</layout>
|
82 |
</appender>
|
83 |
</log4net>
|
3. layout节点的配置说明
01 |
<!-- Made By AX --> |
02 |
<!-- %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 --> |
03 |
<!-- %n(new line):换行 --> |
04 |
<!-- %d(datetime):输出当前语句运行的时刻 --> |
05 |
<!-- %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 --> |
06 |
<!-- %t(thread id):当前语句所在的线程ID --> |
07 |
<!-- %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 --> |
08 |
<!-- %c(class):当前日志对象的名称,例如: --> |
09 |
<!-- 模式字符串为:%-10c -%m%n --> |
10 |
<!-- 代码为: --> |
11 |
<!-- ILog log=LogManager.GetLogger(“Exam.Log”); --> |
12 |
<!-- log.Debug(“Hello”); --> |
13 |
<!-- 则输出为下面的形式: --> |
14 |
<!-- Exam.Log - Hello --> |
15 |
<!-- %L:输出语句所在的行号 --> |
16 |
<!-- %F:输出语句所在的文件名 --> |
17 |
<!-- %-数字:表示该项的最小长度,如果不够,则用空格填充 --> |
18 |
<!-- 例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出: --> |
19 |
<!-- 176 [main] INFO org.foo.Bar - Located nearest gas station. --> |
4.有用的连接: