1.写配置文件。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <log4net> <!--所有logger的基,root的设置在所有logger中都起作用。 当在root和logger中重复设定相同的appender时,你会发现同一日志信息将被记录两次。--> <!--<root> <level value="ALL"/> <appender-ref ref="FileAppender"/> <appender-ref ref="ConsoleAppender"/> </root>--> <logger name="logger"> <!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF--> <!--如果没有定义LEVEL的值,则缺省为DEBUG--> <level value="INFO" /> <appender-ref ref="FileAppender"></appender-ref> </logger> <appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> <!--路径--> <!--<file value="\\log.txt"></file>--> <!--路径,在项目的根目录下--> <!--以最后一个路径为准--> <file value="./Log/log.txt"></file> <!--防止多线程时不能写Log,线程非安全--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <appendToFile value="true" /> <!--可以为:Once|Size|Date|Composite--> <!--Composite为Size和Date的组合--> <rollingStyle value="composite" /> <!--日志最大个数,都是最新的--> <!--rollingStyle节点为Date时,该节点不起作用--> <!--rollingStyle节点为Size时,只能有value个日志--> <!--rollingStyle节点为Composite时,每天有value个日志--> <maxSizeRollBackups value="10" /> <!--当备份文件时,为文件名加的后缀--> <datePattern value="_yyyy-MM-dd.txt" /> <!--可用的单位:KB|MB|GB--> <!--不要使用小数,否则会一直写入当前日志--> <maximumFileSize value="1024KB" /> <!--置为true,当前最新日志文件名永远为file节中的名字--> <staticLogFileName value="true" /> <!--输出级别在INFO和ERROR之间的日志--> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="INFO" /> <param name="LevelMax" value="ERROR" /> </filter> <!--必须结合起来用,第一个只过滤出WARN,第二个拒绝其它其它日志输出--> <!--<filter type="log4net.Filter.LevelMatchFilter"> <param name="LevelToMatch" value="WARN" /> </filter> <filter type="log4net.Filter.DenyAllFilter" />--> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value=" %n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n文 件 名:%F %n行 号:%L %n异常信息:%m %n " /> </layout> </appender> </log4net> <!--==================layout节点的配置说明======================--> <!-- %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 --> <!-- %n(new line):换行 --> <!-- %d(datetime):输出当前语句运行的时刻 --> <!-- %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 --> <!-- %t(thread id):当前语句所在的线程ID --> <!-- %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 --> <!-- %c(class):当前日志对象的名称,例如: --> <!-- 模式字符串为:%-10c -%m%n --> <!-- 代码为: --> <!-- ILog log=LogManager.GetLogger(“Exam.Log”); --> <!-- log.Debug(“Hello”); --> <!-- 则输出为下面的形式: --> <!-- Exam.Log - Hello --> <!-- %L:输出语句所在的行号 --> <!-- %F:输出语句所在的文件名 --> <!-- %-数字:表示该项的最小长度,如果不够,则用空格填充 --> <!-- 例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出: --> <!-- 176 [main] INFO org.foo.Bar - Located nearest gas station. --> <!-- --> <!--=========================================================--> </configuration>
2.添加引用(废话)
3.winform调用组件方法。
在AssemblyInfo.cs文件中添加
a.如果log4net的配置直接写在app.config里面的话添加
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
b.如果log4net的配置单独写在一个文件中,则添加
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
4.web调用组件方法
在Global.aspx.cs文件中的Application_Start方法中添加
a.如果log4net的配置直接写在web.config里面的话添加
log4net.Config.XmlConfigurator.Configure();
b.如果log4net的配置单独写在一个文件中,则添加
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("log4net.config")));
5.调用记录日志方法
static log4net.ILog log = log4net.LogManager.GetLogger("logger"); public static void WriteLog(string message) { log.Info(message); //log.Warn(message); //log.Error(message); //... }
6.测试效果。
a.winform
异常时间:2013-01-18 16:30:13,475 [1]
异常级别:ERROR
异 常 类:logger [(null)]
文 件 名:d:\Visual Studio Project\TestLog4Net\TestLog4Net\Form1.cs
行 号:25
异常信息:输入字符串的格式不正确。
b.web
异常时间:2013-01-18 16:44:02,527 [8]
异常级别:INFO
异 常 类:logger [(null)]
文 件 名:d:\Visual Studio Project\TestLog4Net\WebLog4NetTest\Default.aspx.cs
行 号:26
异常信息:输入字符串的格式不正确。
7.测试发现一个问题。
在winform中,行号记录的是实际发生错误的行。
在web中,行号记录的是记录错误代码的行。
不知道是什么原因。。。。