Quartz+log4net實現控制台程序定時運行,並且記錄日志


c# 控制台程序定時運行,並記錄日志。

組件Quartz + log4net

Quartz定時運行程序log4net記錄日志

首先建立控制台程序“QuartzTest”

安裝Quartzlog4net這兩個組件。如下圖流程

安裝Quartz

安裝log4net

安裝完畢后引用里多了如下

然后在項目中添加log4net.config

並將log4net.config屬性中的“復制到輸出目錄”設置為“始終復制

log4net.config中的XML文本如下

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
  </configSections>

  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <!--日志路徑-->
      <param name= "File" value= "Logs\"/>
      <!--是否是向文件中追加日志-->
      <param name= "AppendToFile" value= "true"/>
      <!--log保留天數-->
      <param name= "MaxSizeRollBackups" value= "10"/>
      <!--日志文件名是否是固定不變的-->
      <param name= "StaticLogFileName" value= "false"/>
      <!--日志文件名格式為:2008-08-31.log-->
      <param name= "DatePattern" value= "yyyy-MM-dd&quot;.log&quot;"/>
      <!--日志根據日期滾動-->
      <param name= "RollingStyle" value= "Date"/>
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n %loggername" />
      </layout>
    </appender>

    <!-- 控制台前台顯示日志 -->
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR" />
        <foreColor value="Red, HighIntensity" />
      </mapping>
      <mapping>
        <level value="Info" />
        <foreColor value="Green" />
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%n%date{HH:mm:ss,fff} [%-5level] %m" />
      </layout>

      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="Info" />
        <param name="LevelMax" value="Fatal" />
      </filter>
    </appender>

    <root>
      <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
      <level value="all" />
      <appender-ref ref="ColoredConsoleAppender"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
  </log4net>
</configuration>
View Code

為了方便log4net的使用,我添加了類LoggerManager,代碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using log4net;
using System.IO;

namespace QuartzTest
{
    public class LoggerManager
    {
        private ILog _logger = LogManager.GetLogger(typeof(Job));
        public LoggerManager()
        {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
        }

        public void Write(string message)
        {
            _logger.InfoFormat(message);
        }
    }
}
View Code

現在所有的准備工作都做完啦。

然后添加Job類(也就是定時執行的程序)繼承與IJob 代碼如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Quartz;
using log4net;

namespace QuartzTest
{
    public class Job : IJob
    {
        private readonly ILog _logger = LogManager.GetLogger(typeof(Job));
        /// <summary>
        /// 每到設定好的時間都會自動執行此程序
        /// </summary>
        public void Execute(IJobExecutionContext context)
        {
            _logger.InfoFormat("Job程序執行");
        }

    }
}
View Code

項目結構應該是這樣子的

 

最后在控制台程序的Program中的main函數下配置Quartz,通過其定時執行Job

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Quartz;
using log4net;
using Quartz.Impl;

namespace QuartzTest
{
    class Program
    {
        static void Main(string[] args)
        {
            LoggerManager log = new LoggerManager();
            log.Write("監測程序正在運行,每到設定好的時間就會自動執行“Job程序”");

            //實例化Quartz調度器工廠
            ISchedulerFactory sf = new StdSchedulerFactory();
            //通過工廠獲取調度器
            IScheduler sched = sf.GetScheduler();
            //配置作業
            IJobDetail job = new JobDetailImpl("AutoExecute", "group_AutoExecute", typeof(Job));

            //配置觸發器,使用簡單觸發器,間隔10秒觸發一次,無限次觸發

            ITrigger t = TriggerBuilder.Create()
                        .WithIdentity("AutoExecute_JobTrigger1").ForJob(job)
                        .WithDailyTimeIntervalSchedule(p =>
                            p.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0))
                            .EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(23, 59))
                            .WithIntervalInSeconds(10).OnEveryDay()
                            ).Build();

            //觸發器和作業綁定
            sched.ScheduleJob(job, t);
            sched.Start();
        }
    }
}
View Code

全都完畢以后就可以執行了,執行時候如下圖,可以看到 每隔10秒就會執行一次,並且是整時間執行,然后同時記錄的日志也顯示在了窗口中。(當然日志也會在本地的文件中記錄一份)

打開程序的根目錄就能發現記錄日志的文件夾與文件。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM