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" ))); |
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.有用的连接: