本文转自http://www.cnblogs.com/puzi0315/archive/2012/08/08/2628966.html
Log4net监控服务状态
对于比较复杂的逻辑,可以使用log4net来记录程序的执行过程中的关键数据,以此来监控服务的逻辑是否完备。
1.在项目中引入log4net.dll组件;
2.在App.congfig中做如下修改
在<configSections></configSections>加入如下内容:
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
在根结点下加入如下内容:
3.新建LogHelp.cs文件using System;using System.Collections.Generic;using System.Text;using log4net;using System.Diagnostics;using System.Reflection; namespace WinService{
public class LogHelper
{ private static readonly ILog logInfo = LogManager.GetLogger("Log"); private static readonly ILog logErr = LogManager.GetLogger("Err"); /// <summary> /// 记录正常的消息 /// </summary> /// <param name="msg">消息内容</param> public static void info(string msg) { logInfo.Info(msg); } /// <summary> /// 记录异常信息 /// </summary> /// <param name="msg">异常信息内容</param> public static void error(string msg) { StackTrace stackTrace = new StackTrace(); StackFrame stackFrame = stackTrace.GetFrame(1); MethodBase methodBase = stackFrame.GetMethod(); logErr.Error("类名:" + methodBase.ReflectedType.Name + " 方法名:" + methodBase.Name + " 信息:" + msg); } }}
重新生成项目,在项目的关键地方可以使用LogHelper.info()函数记录正常执行的关键信息,用LogHelper.error()函数记录抛出的异常信息。
比如:
protectedoverridevoid OnStart(string[] args) { // TODO: 在此处添加代码以启动服务。 try { theTimer.Start(); timespan = Convert.ToDouble(System.Configuration.ConfigurationManager.AppSettings["timespan"]); theTimer.Interval = timespan * 60 * 1000;//间隔时间为五分钟,取前后2.5分钟 LogHelper.info("WinService服务启动:" + DateTime.Now.ToString()); } catch (Exception ex) { LogHelper.error("WinService服务启动错误:"+ex.Message); } }
在项目的bin\Debug目录下可以看到两个文件夹:WindowsServiceErr和WindowsServiceLog,分别存放信息日志和错误日志,结合相关日志可以帮助分析系统运行是否正常。如果看不到两个文件夹,可以在项目的Properties\AssemblyInfo.cs文件中加入如下内容:
[assembly: log4net.Config.XmlConfigurator(Watch = true)]