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>

为了方便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);
}
}
}

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

然后添加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程序执行");
} }
}

项目结构应该是这样子的

最后在控制台程序的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(, ))
.EndingDailyAt(TimeOfDay.HourAndMinuteOfDay(, ))
.WithIntervalInSeconds().OnEveryDay()
).Build(); //触发器和作业绑定
sched.ScheduleJob(job, t);
sched.Start();
}
}
}

全都完毕以后就可以执行了,执行时候如下图,可以看到 每隔10秒就会执行一次,并且是整时间执行,然后同时记录的日志也显示在了窗口中。(当然日志也会在本地的文件中记录一份)

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

Quartz+log4net实现控制台程序定时运行,并且记录日志的更多相关文章

  1. Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法

    Ubuntu下QT控制台程序无法运行的解决方案以及XTerm的配置方法 最近由于老师要求要在Ubuntu下QT上进程多线程服务器的开发,虽然只是单纯的调用qt的network模块,但是为了避免麻烦,我 ...

  2. Windows系统中设置Python程序定时运行方法

    Windows系统中设置Python程序定时运行方法 一.环境 win7 + Python3.6 二.步骤 1,在Windows开始菜单中搜索“计划任务”,并且点击打开“计划任务”: 2.点击“创建基 ...

  3. .NET C# 【小技巧】控制台程序,运行是否弹出窗口选择!

    选中控制台程序项目,右键→属性→应用程序栏→输出类型: 1.Windows 应用程序(不弹出提示框)! 2.控制台应用程序(弹出提示框)! 3.类库(类库生成dll,是不能直接运行的,类库供应用程序调 ...

  4. 如何在Windows系统中设置Python程序定时运行

    文章出处:http://blog.csdn.net/wwy11/article/details/51100432 首先,我们肯定是要用到Windows下的[计划任务]功能 之后点击右侧的[创建基本任务 ...

  5. linux下如何让控制台程序后台运行

    方法1:./test & 方法2:(./test &) 方法3:nohup 和bg 方法4:screen -mS test /root/test   退出程序需要手动进入screen创 ...

  6. win10设置Python程序定时运行(设置计划任务)

    今天来设置一下定时执行Pycharm内的脚本: 这个要基于win10 的任务计划程序(设置 > 控制面板 > 系统和安全 > 管理工具 > 任务计划程序) 1. create ...

  7. C#控制台程序,运行完窗口不退出的方法

    .... static void Main(string[] args){ Console.WriteLine("运行完后不退出窗口"); Console.ReadKey();// ...

  8. 【Visual Studio】控制台程序运行时一闪而过

    问题:写一个C#控制台程序,运行时控制台一闪而过.程序结束.无法看清控制台输出的结果. 办法: 方法一二三都有人写过百度经验了:怎么解决VS运行程序一闪而过 其实还有一种办法,就是把控制台程序改为Wi ...

  9. Qt在Windows下如何创建无CMD窗口控制台程序

    默认情况下,用Qt新建一个控制台程序,运行时会弹出CMD窗口.如何把窗口去掉呢? *.pro文件默认是这样的: TEMPLATE = app CONFIG += console CONFIG -= a ...

随机推荐

  1. 关于ToolStrip设置Location无效的问题

    问题现象 当多个ToolStrip使用ToolStripContainer布局时,可以让用户自己拖动工具栏,所以在程序关闭时必须保存用户拖动工具栏的位置,但是在再次打开程序后,还原回来的工具栏位置会有 ...

  2. js 获取页面内链接

    今天有同学问如何用 JS 正则表达式获取一段文本中的超链接,并对超链接进行处理,想了几分钟,写了下面的代码: var re = /https?:\/\/[\w\.:~\-\d\/]+(?:\?[\w\ ...

  3. D3D游戏降帧的动态创建D3D设备以及ShellCode HOOK玩法

    欢迎转载,转载请注明出处:http://blog.csdn.net/gnorth/article/details/9327971 说白了,也就是HOOK掉Present,这种代码,其实百度上某些地方有 ...

  4. 【Unity 3D】教程(1)建立场景

    1.新建一个地形 在菜单中选择Terrain,新建一个地形 接下来在右边的“编辑高度”中,用笔刷绘出地形高度,如图: 2.地形纹理 接下来我们给地形贴上纹理,纹理资源我们使用unity自带的, 在Pr ...

  5. [置顶] 使用Android OpenGL ES 2.0绘图之五:添加运动

    传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.csd ...

  6. building android/ubuntu-touch on 32bit machine

    host C: libhost <= build/libs/host/CopyFile.c host StaticLib: libhost (/media/linux/1/touch/expor ...

  7. python中函数与函数之间的调用,总是晕菜,整理如下,有不对或者补充的请提出来~

    1.python函数基础 函数名: fun 函数体:1~3行 返回值:2 调用函数:fun() ,只有见到这个括号(),程序会根据函数名从内存中找到函数体,然后执行它. 2.函数的执行顺序 下面的fu ...

  8. CodeVS 3415-最小和

    原题 题目描述 Description      小浣熊松松来到文具店,选择了K支自己喜欢的水彩笔,并抄下了它们的价格.可是到结算时,他发现自己抄价格时抄得太密集,以至于所有价格连成了一个数字串(你可 ...

  9. 东秦C#课设002-简单的文本编辑器

    //加入的拖拽属性失败,dropenter声明方法待查. using System; using System.Collections.Generic; using System.ComponentM ...

  10. js ajax 调试

    谷歌浏览器 F12->network->()请求ajax)->出现ajax调用的方法名-->点击查看网站请求地址--返回所有的数据(preview面板中) success返回后 ...