c#判断应用程序是否正常运行以及输出异常关闭日志

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");

猜你喜欢

转载自blog.csdn.net/m0_37591671/article/details/78323820