c#判断应用程序是否正常运行以及输出异常关闭日志
1.需求
在一个桌面应用程序的运行过程中,需要依赖另外一个程序实时计算,因此得保证该计算程序能时刻运行,如果停止了,立刻重新启动,并且输出异常关闭日志。
2.分析
既然需要实现判断能否正常运行和输出异常关闭日志,所以就应该分为两部分来分别实现功能。
3.判断是否正常运行
⑴根据进程名获取进程;
⑵判断进程是否存在,不存在,输出关闭异常,重新启动;
⑶添加计时器重复执行⑴⑵;
实现代码:
①前两步的方法:
public void Judge(object source, System.Timers.ElapsedEventArgs e)
{
//获取进程
Process[] app = Process.GetProcessesByName("cloudmusic");
if (app.Length > 0)
{
Action action = () => txt1.Text = DateTime.Now.ToString()+" cloudmusic正在运行";
this.Dispatcher.BeginInvoke(action);
return;
}
else
{
Action action = () => txt1.Text = DateTime.Now.ToString()+" cloudmusic已关闭,正在重启";
log.Error("程序异常关闭");
this.Dispatcher.BeginInvoke(action);
System.Diagnostics.Process.Start(@"E:\CloudMusic\cloudmusic.exe");
log.Debug("程序重新启动");
}
}
②计时器:
System.Timers.Timer time = new System.Timers.Timer(1000);//实例化Timer类,设置间隔时间为1000毫秒;
time.Elapsed += new System.Timers.ElapsedEventHandler(Judge);//到达时间的时候执行事件;
time.AutoReset = true;//设置是执行一次(false)还是一直执行(true);
time.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件;
4.输出异常关闭日志
⑴获取log4net.dll文件
链接:http://pan.baidu.com/s/1bpbaUbP 密码:t1w2
⑵添加引用log4net.dll
⑶修改APP.config的配置文件
//<configSections>…</configSections>这部分一定要放在最上面,即紧接着<configuration>,不然会报错
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/>
</configSections>
<log4net>
<!--定义输出到文件中-->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<!--定义文件存放位置-->
<file value="d:\\log\\"/>
<appendToFile value="true"/>
<rollingStyle value="Date"/>
<datePattern value="yyyyMMdd'.txt'"/>
<staticLogFileName value="false"/>
<param name="MaxSizeRollBackups" value="100"/>
<layout type="log4net.Layout.PatternLayout">
<!--每条日志末尾的文字说明-->
<!--输出格式-->
<!--样例:2008-03-26 13:42:32,111 [10] INFO Log4NetDemo.MainClass [(null)] - info-->
<!--<conversionPattern value="%newline %n记录时间:%date %n线程ID:[%thread] %n日志级别: %-5level %n出错类:%logger property: [%property{NDC}] - %n错误描述:%message%newline %n"/>-->
<conversionPattern value="[%date] %thread -- %-5level -- %logger [%M] -- %message%newline"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<!--文件形式记录日志-->
<appender-ref ref="RollingLogFileAppender"/>
</root>
</log4net>
⑷修改AssemblyInfo.cs
添加[assembly: log4net.Config.XmlConfigurator(Watch = true)]
⑸ 获得log对象
public static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
⑹ 调用log的方法
//记录错误日志
log.Error("error",new Exception("发生了一个异常"));
//记录严重错误
log.Fatal("fatal",new Exception("发生了一个致命错误"));
//记录一般信息
log.Info("info");
//记录调试信息
log.Debug("debug");
//记录警告信息
log.Warn("warn");