最近要做一个windows服务,用log4net来记录日志;之前在web和winform中使用过但是在service中还没有,所以查找了好多资料。得到的答案也是五花八门,虽然有失败的有成功的但是根据自己总结下来发现以下方法比较简单,使用也方便; 现在分享出来:
1、项目中新建config文件:log4net.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<log4net>
<logger additivity="false" name="MdaoToBeyondbitSMS">
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</logger>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="%logs\%date{yyyMMdd}.txt"/>
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100KB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%r] [%t] %-5p %c [%x] ----%m%n" />
<!--<conversionPattern value="%d [%t] %-5p %c [%x] -%m" />
<header value="
-header-
"/>
<footer value="
-footer-
"/>-->
</layout>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
附带上从别的地方拷贝来的说明:
程序中需加此配置
<configSections>
<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
</configSections>
仅在这里配置了不代表启用了
具体说来有如下Appender:
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的形式广播。、
关于使用log4net中可能会使用到的一些参数
%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个字符则以空格填充。
下面以一个实际的例子来说明问题,比如在配置中有“%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline”,那么实际的日志中会是如下格式:
“记录时间:2010-11-17 16:16:36,561 线程ID:[9] 日志级别:文件:所在行ERROR 出错类:Log4NetDemo.Program property:[(null)] - 错误描述:error
System.Exception: 在这里发生了一个异常,Error Number:2036084948”
2.右键此配置文件, 属性--
选择始终复制;
3. 项目引用log4net.dll;
4.重点是对此config文件进行配置‘
打开 properties/assemblyinfo.cs
在顶部添加:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
即可完成配置;
5.在program.cs中进行测试;代码如下:
/// <summary>
/// 应用程序的主入口点。
/// </summary>
static void Main()
{
log4net.ILog logger = log4net.LogManager.GetLogger("MdaoToBeyondbitSMS");
logger.Info("开始启动");
//ServiceBase[] ServicesToRun;
//ServicesToRun = new ServiceBase[]
//{
// new Service1()
//};
//ServiceBase.Run(ServicesToRun);
}记录结果:2012-06-18 16:37:09,733 [70] [10] INFO MdaoToBeyondbitSMS [(null)] ----开始启动
以上,有什么疑问请联系我;
qq570637885