Log4net集成QuartZ.Net

Log4Net

配置:

在app.config或者web.config文件中加入以下配置节

<configuration>
<configSections>
<section
name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>

<log4net>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="log-data\rollinglog" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyyMMdd".log"" />
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] <%X{auth}>%n - %m%n" />
</layout>
</appender>
</log4net>
</configuration>


在AssemblyInfo.cs文件中加入以下代码行:否则日志无法输出

[assembly: log4net.Config.DOMConfigurator(ConfigFileExtension = "config", Watch = true)]

或者初始化的时候手工加载:

string assemblyFilePath = Assembly.GetExecutingAssembly().Location;
string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);
FileInfo file = new FileInfo(Path.Combine(assemblyDirPath,"App.config"));
DOMConfigurator.ConfigureAndWatch(file);
QuartZ.Net
资料:
官网:http://quartznet.sourceforge.net

博客:http://www.cnblogs.com/shanyou/category/102991.html

几个重要的对象:

1、作业调度器接口 IScheduler:这个接口负责启动一个作业和关闭一个作业,在启动和关闭作业之前,它还需要接受两个东西,一个是触发器(Trigger),一个是工作任务(JobDetail),要得到一个这样的接口的实例,我们还需要一个作业调度器工厂(ISchedulerFactory)。

2、作业调度器工厂接口 ISchedulerFactory:从命名来看,很明显是个工厂,专门产出IScheduler接口。

3、工作任务 JobDetail:它定义了你要定时去做什么工作,初始化一个该类的对象,我们要指定工作名(name),工作的组名(group),还有就是一个实现了IJob接口的类的类型(Type),就是说JobD定义的是做什么。

4、触发器 Trigger:据说Quartz.NET的触发器有很多,但是一般我们使用的是两种(都是继承了Trigger类的子类),一个是CronTrigger、另外一个是SimpleTrigger,我们要指定触发器名(name),触发器的的职责是定义工作任务的触发规则,也就是说Trigger定义的是啥时候做。

5、工作接口 IJob:我们需要把定时要做的事情(业务逻辑,例如去写一下数据库,写一下文件之类的)包装在一个类里面,这个类有一个特点,就是继承IJob这个接口,实现该接口的唯一方法Execute(JobExecutionContext context),在这个方法中将尽情地用代码实现我们的业务,所以可以说这个接口定义的是如何做。

代码手工定义任务:

任务定义:

public class SimpleJob:IJob
{
private static ILog log = LogManager.GetLogger(typeof(SimpleJob));

#region IJob Members

void IJob.Execute(JobExecutionContext context)
{
try
{
string jobName = context.JobDetail.FullName;
log.Info("Executing job: " + jobName + " executing at " + DateTime.Now.ToString());
}
catch (Exception e)
{
log.Info("--- Error in job!");
JobExecutionException e2 = new JobExecutionException(e);
// this job will refire immediately
e2.RefireImmediately = true;
throw e2;
}
}
#endregion
}

任务调度:

//初始化调度器
ISchedulerFactory sf = new StdSchedulerFactory();
IScheduler sched = sf.GetScheduler();

//初始化工作任务
JobDetail job = new JobDetail("myjob", "group", typeof(SimpleJob));

//触发器
Trigger trigger = TriggerUtils.MakeSecondlyTrigger(5);
trigger.Name = "mytrigger";
DateTime ft = sched.ScheduleJob(job, trigger);
//启动
sched.Start();
//停止
sched.Shutdown(true);

通过配置文件定义任务:
主配置文件:App.config

<configuration>

<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
</sectionGroup>
</configSections>

<log4net>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="log-data\rollinglog" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10"/>
<param name="StaticLogFileName" value="false"/>
<param name="DatePattern" value="yyyyMMdd".log"" />
<param name="RollingStyle" value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] <%X{auth}>%n - %m%n" />
</layout>
</appender>
</log4net>

<common>
<logging>
<factoryAdapter type="Common.Logging.Simple.ConsoleOutLoggerFactoryAdapter, Common.Logging">
<arg key="showLogName" value="true"/>
<arg key="showDataTime" value="true"/>
<arg key="level" value="DEBUG"/>
<arg key="dateTimeFormat" value="HH:mm:ss:fff"/>
</factoryAdapter>
</logging>
</common>

<quartz>
<add key="quartz.scheduler.instanceName" value="ExampleDefaultQuartzScheduler"/>
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz"/>
<add key="quartz.threadPool.threadCount" value="10"/>
<add key="quartz.threadPool.threadPriority" value="2"/>
<add key="quartz.jobStore.misfireThreshold" value="60000"/>
<add key="quartz.jobStore.type" value="Quartz.Simpl.RAMJobStore, Quartz"/>
</quartz>

</configuration>

任务、定时器配置文件:

quartz_jobs.xml

<quartz xmlns="http://quartznet.sourceforge.net/JobSchedulingData"
xmlnssi="http://www.w3.org/2001/XMLSchema-instance"
version="1.0"
overwrite-existing-jobs="true">

<calendar type="Quartz.Impl.Calendar.AnnualCalendar, Quartz" replace="false">
<name>cal1</name>
<description>description0</description>
<base-calendar type="Quartz.Impl.Calendar.WeeklyCalendar, Quartz" replace="false">
<name>name1</name>
<description>description1</description>
</base-calendar>
</calendar>

<calendar type="Quartz.Impl.Calendar.AnnualCalendar, Quartz" replace="false">
<name>cal2</name>
<description>description0</description>
<base-calendar type="Quartz.Impl.Calendar.WeeklyCalendar, Quartz" replace="false">
<name>name1</name>
<description>description1</description>
</base-calendar>
</calendar>

<job>
<job-detail>
<name>jobName1</name>
<group>jobGroup1</group>
<description>jobDesciption1</description>
<job-type>CommonlogDemo.SimpleJob, CommonlogDemo</job-type>
<volatile>false</volatile>
<durable>true</durable>
<recover>false</recover>
<job-data-map>
<entry>
<key>key0</key>
<value>value0</value>
</entry>
<entry>
<key>key1</key>
<value>value1</value>
</entry>
<entry>
<key>key2</key>
<value>value2</value>
</entry>
</job-data-map>
</job-detail>

<trigger>
<simple>
<name>simpleName</name>
<group>simpleGroup</group>
<description>SimpleTriggerDescription</description>
<misfire-instruction>SmartPolicy</misfire-instruction>
<calendar-name>cal1</calendar-name>
<volatile>false</volatile>
<job-name>jobName1</job-name>
<job-group>jobGroup1</job-group>
<start-time>1982-06-28T18:15:00.0Z</start-time>
<end-time>2015-05-04T18:13:51.0Z</end-time>
<repeat-count>100</repeat-count>//调度次数
<repeat-interval>3000</repeat-interval>//3秒
</simple>
</trigger>

<trigger>
<cron>
<name>cronName</name>
<group>cronGroup</group>
<job-name>jobName1</job-name>
<job-group>jobGroup1</job-group>
<start-time>1982-06-28T18:15:00+02:00</start-time>
<cron-expression>0/10 * * * * ?</cron-expression>//每10秒钟
</cron>
</trigger>

</job>
</quartz>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值