记录日志可以帮助开发人员很快找到问题所在。所以,每个系统中都会有记录日志的功能。本篇文章为大家分享小编正在做的系统中用到的记录日志的方法。
首先,需要下载log4net,并引用。
<span style="font-family:KaiTi_GB2312;font-size:24px;"><configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <log4net> <!--定义日志的输出媒介--> <!--在root中开启或关闭日志--> <root> <!--日志存放的地方--> <level value="Debug"/> <!--文件形式记录日志--> <appender-ref ref="RollingLogFileAppender"/> <!--这里的ref是appender中的name--> <!--控制台控制显示日志--> <appender-ref ref="ConsoleAppender"/> </root> <!--定义输出到文件中--> <!--将日志以回滚文件的形式写到文件中。--> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <!--定义文件存放位置和日志文件名--> <file value="log/log4net.txt"/> <appendToFile value="true"/> <rollingStyle value="Size"/> <!--每个日志文件最大100KB--> <maxSizeRollBackups value="10"/> <!--每个日志文件最大1000KB--> <maximumFileSize value="1000kb"/> <rollingStyle value="size"/> <staticLogFileName value="true"/> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <layout type="log4net.Layout.PatternLayout"> <!--每条日志开头和末尾的文字说明--> <header value=" [============================应用程序日志开始============================ ] </span><span style="font-family:KaiTi_GB2312;font-size:24px;"> </span><span style="font-family:KaiTi_GB2312;font-size:24px;">" /> </span><span style="font-family:KaiTi_GB2312;font-size:24px;"></span><pre name="code" class="plain"><span style="font-family:KaiTi_GB2312;font-size:24px;"> <footer value=" </span><span style="font-family:KaiTi_GB2312;font-size:24px;"> </span><span style="font-family:KaiTi_GB2312;font-size:24px;">[ ============================应用程序日志结束============================] </span><span style="font-family:KaiTi_GB2312;font-size:24px;"> </span><span style="font-family:KaiTi_GB2312;font-size:24px;">" /> </span><span style="font-family:KaiTi_GB2312;font-size:24px;"></span><pre name="code" class="plain"><span style="font-family:KaiTi_GB2312;font-size:24px;"></span><pre name="code" class="plain"><span style="font-family:KaiTi_GB2312;font-size:24px;"> <!--%d(datetime):输出当前语句运行的时刻 --> <!--%t(thread id):当前语句所在的线程ID --> <!--%c(class):当前日志对象的名称--> <!--%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 --> <!--%n(new line):换行 --> <conversionPattern value="%d [%t] %c - %m%n"/> </layout> </appender></span>
<span style="font-family:KaiTi_GB2312;font-size:24px;">//注意下面的语句一定要加上,指定log4net使用.config文件来读取配置信息 [assembly: log4net.Config.XmlConfigurator(Watch = true)] namespace TestLog4net { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } private log4net.ILog log = log4net.LogManager.GetLogger(typeof(MainWindow)); private void button1_Click(object sender, RoutedEventArgs e) { try { int a = Convert.ToInt32(textBox1.Text); int b = Convert.ToInt32(textBox2.Text); a = b; } catch (Exception ex) { log.Error("出错了!", ex); MessageBox.Show("已经写入日志了!", "提示", MessageBoxButton.OK, MessageBoxImage.Information); } } } }</span>
注意:上面的代码中有这么一句:[assembly: log4net.Config.XmlConfigurator(Watch = true)](在需要使用log4net的类的namespace处), 如果没有这句话,日志就写不进去。这句话是指定log4net使用.config文件来读取配置信息 。
效果图:
代码完成之后,生成解决方案的时,可能会报错:
修改程序属性,将目标框架默认的.NETFramework4 Client Profile修改为.NET Framework4之后再重新生成解决方案就可以了。
若使用的是wpf界面(本人使用的是),修改完成之后,MainWindow.xaml报错:
未找到原因,只是在重复改目标框架后,再次打开,不再报错了。若还不行,需要重新删除,再建项。
AdoNetAppender:利用ADO.NET记录到数据库的日志。
AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。
AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。
ConsoleAppender:将日志输出到控制台。
EventLogAppender:将日志写到Windows Event Log.
FileAppender:将日志写到文件中。
LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下).
MemoryAppender:将日志存到内存缓冲区。
NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。
RemotingAppender:通过.NET Remoting将日志写到远程接收端。
RollingFileAppender:将日志以回滚文件的形式写到文件中。
SmtpAppender:将日志写到邮件中。
TraceAppender:将日志写到.NET trace 系统。
UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
%f(file):输出语句所在的文件名。
%l(line):输出语句所在的行号。
%数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。
1. Log4net使用详解(续)
2. Log4net保存自定义信息到数据库
3. Asp.net夜话之十一:web.config详解