Quartz+log4net实现控制台程序定时运行,并且记录日志

摘要:
c#控制台程序定时运行,并记录日志。首先建立控制台程序“QuartzTest”安装Quartz、log4net这两个组件。如下图流程安装Quartz安装log4net安装完毕后引用里多了如下然后在项目中添加log4net.config并将log4net.config属性中的“复制到输出目录”设置为“始终复制”log4net.config中的XML文本如下˂!

c# 控制台程序定时运行,并记录日志。

组件Quartz +log4net

Quartz定时运行程序log4net记录日志

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

安装Quartzlog4net这两个组件。如下图流程

Quartz+log4net实现控制台程序定时运行,并且记录日志第1张

安装Quartz

Quartz+log4net实现控制台程序定时运行,并且记录日志第2张

安装log4net

Quartz+log4net实现控制台程序定时运行,并且记录日志第3张

安装完毕后引用里多了如下

Quartz+log4net实现控制台程序定时运行,并且记录日志第4张

然后在项目中添加log4net.config

Quartz+log4net实现控制台程序定时运行,并且记录日志第5张

并将log4net.config属性中的“复制到输出目录”设置为“始终复制

Quartz+log4net实现控制台程序定时运行,并且记录日志第6张

log4net.config中的XML文本如下

Quartz+log4net实现控制台程序定时运行,并且记录日志第7张Quartz+log4net实现控制台程序定时运行,并且记录日志第8张
<?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,代码如下

Quartz+log4net实现控制台程序定时运行,并且记录日志第9张Quartz+log4net实现控制台程序定时运行,并且记录日志第10张
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;

usinglog4net;
usingSystem.IO;

namespaceQuartzTest
{
    public classLoggerManager
    {
        private ILog _logger = LogManager.GetLogger(typeof(Job));
        publicLoggerManager()
        {
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.BaseDirectory + "log4net.config"));
        }

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

现在所有的准备工作都做完啦。

然后添加Job类(也就是定时执行的程序)继承与IJob 代码如下

Quartz+log4net实现控制台程序定时运行,并且记录日志第11张Quartz+log4net实现控制台程序定时运行,并且记录日志第12张
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;

usingQuartz;
usinglog4net;

namespaceQuartzTest
{
    public classJob : IJob
    {
        private readonly ILog _logger = LogManager.GetLogger(typeof(Job));
        /// <summary>
        ///每到设定好的时间都会自动执行此程序
        /// </summary>
        public voidExecute(IJobExecutionContext context)
        {
            _logger.InfoFormat("Job程序执行");
        }

    }
}
View Code

项目结构应该是这样子的

Quartz+log4net实现控制台程序定时运行,并且记录日志第13张

最后在控制台程序的Program中的main函数下配置Quartz,通过其定时执行Job

Quartz+log4net实现控制台程序定时运行,并且记录日志第14张Quartz+log4net实现控制台程序定时运行,并且记录日志第15张
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;

usingQuartz;
usinglog4net;
usingQuartz.Impl;

namespaceQuartzTest
{
    classProgram
    {
        static void Main(string[] args)
        {
            LoggerManager log = newLoggerManager();
            log.Write("监测程序正在运行,每到设定好的时间就会自动执行“Job程序”");

            //实例化Quartz调度器工厂
            ISchedulerFactory sf = newStdSchedulerFactory();
            //通过工厂获取调度器
            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秒就会执行一次,并且是整时间执行,然后同时记录的日志也显示在了窗口中。(当然日志也会在本地的文件中记录一份)

Quartz+log4net实现控制台程序定时运行,并且记录日志第16张

打开程序的根目录就能发现记录日志的文件夹与文件。

Quartz+log4net实现控制台程序定时运行,并且记录日志第17张

Quartz+log4net实现控制台程序定时运行,并且记录日志第18张

免责声明:文章转载自《Quartz+log4net实现控制台程序定时运行,并且记录日志》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇IDEA+PHP+XDebug调试配置OpenMediaVault 5 进阶配置(一) 启用 SSL/TLS下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

vue.config.json CopyWebpackPlugin 没有生效

本地生效,服务器不生效。 因为是jenkinis构建,没有留意到报错。后来发现错误:ENOENT: no such file or directory, rename 解决方法就是:删除package.lock.json,重新搞就行 https://blog.csdn.net/u012878073/article/details/86511957...

1.Vue技术栈开发实战-使用vue-cli3创建项目

vue-cli2.0和 vue cli3.0是有天壤之别的,主要得益于webpack4的零配置。vue-cli3.0创建项目,不再需要我们去书写庞杂的webpack配置,我们基本实现,什么都不用配置就可以启动、编译、打包我们的项目, 我们使用vue ui来创建项目,vue ui是vue cli3.0给我们提供的可视化的项目管理工具 你需要提前安装好vue...

pyspark mongodb yarn

from pyspark.sql import SparkSessionmy_spark = SparkSession .builder .appName("myApp") .config("spark.mongodb.input.uri", "mongodb://pyspark_admin:admin123@192.168.2.5...

(转)react 项目构建

原文:https://segmentfault.com/a/1190000016342792 写在前面 每次构建react项目的时候都会配置一大堆东西,时间久了就会忘记怎么配置。为了方便自己记忆也为了其他开发者在构建react应用时能够快速开发,故作此记录。 本项目基于 create-react-app 脚手架进行配置。主要配置了一些项目开发中常用的方法,...

HPE 交换机基础配置

1、交换机命名(config)# hostname POE-SW2、vlan创建及端口划分1)端口加入vlan,两种方式(config)# vlan 2(vlan-2)# untagged ethernet 1,3,5-10 /把这些端口加入vlan 2(config)# vlan 3 untagged Ethernet 1,3,5-10 /另外一种端口加...

.net/c#常用框架/中间件简介

任务调度 Quartz.NET:Quartz.NET是一个开源的作业调度框架,非常适合在平时的工作中,定时轮询数据库同步,定时邮件通知,定时处理数据等。Quartz.NET允 许开发人员根据时间间隔(或天)来调度作业。它实现了作业和触发器的多对多关系,还能把多个作业与不同的触发器关联。整合了 Quartz.NET的应用程序可以重用来自不同事件的作业,还...