关闭Quartz .Net中的Debug Logging

时间:2009-05-18 11:15:59

标签: .net quartz.net

我正在使用Quartz.NET在我们的应用程序中安排一些自定义任务。一切正常,但它会在一秒内记录大约20个调试条目。

我不知道如何关闭调试日志记录。任何帮助都会非常感激,因为我一直试图在网上查找而没有运气。

调试条目如下所示

DEBUG 2009-05-12 03:24:14,000 8612670ms StdRowLockSemaphore    ObtainLock         - Lock 'TRIGGER_ACCESS' is desired by: SchedulerFactory_QuartzSchedulerThread
DEBUG 2009-05-12 03:24:14,029 8612699ms StdRowLockSemaphore    ExecuteSQL         - Lock 'TRIGGER_ACCESS' is being obtained: SchedulerFactory_QuartzSchedulerThread
DEBUG 2009-05-12 03:24:14,029 8612699ms StdRowLockSemaphore    ObtainLock         - Lock 'TRIGGER_ACCESS' given to: SchedulerFactory_QuartzSchedulerThread
DEBUG 2009-05-12 03:24:14,034 8612704ms StdRowLockSemaphore    ReleaseLock        - Lock 'TRIGGER_ACCESS' returned by: SchedulerFactory_QuartzSchedulerThread
DEBUG 2009-05-12 03:24:14,035 8612705ms StdRowLockSemaphore    ObtainLock         - Lock 'TRIGGER_ACCESS' is desired by: SchedulerFactory_QuartzSchedulerThread
DEBUG 2009-05-12 03:24:14,035 8612705ms JobRunShell            Run                - Calling Execute on job DEFAULT.ProcessIncomingMTRJob

6 个答案:

答案 0 :(得分:19)

如果您希望减少通过公共日志记录基础结构的所有日志记录,那么

Rytmis' answer非常棒。

但是如果你有更多的代码通过Common Logging进行日志记录,并且你只想减少从Quartz(而不是代码的其余部分)的日志记录,我建议的是这个:

在log4net config xml(通常为app.config)中,您可能已经有类似这样的内容:

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

保持原样。之后(或<log4net>配置部分内的任何地方)只需添加:

    <logger name="Quartz">
        <level value="ERROR" />
    </logger>

这个<logger>部分将配置所有具有命名空间“Quartz”的记录器。因此,在此示例中,Quartz将使用级别ERROR进行日志记录,而我的应用程序的其余部分将使用级别ALL进行日志记录。

答案 1 :(得分:10)

如果任何人需要在NLog中执行此操作,只需在NLog.Config中添加以下内容作为顶级moste规则

<!-- Disable Quartz info logging -->
<logger name="Quartz*" minlevel="Trace" maxlevel="Info" final="true" />

请注意,如果您不希望将maxlevel="Info"更改为maxlevel="Fatal"

,这仍然会让其他记录器发出警告,错误,致命

答案 2 :(得分:7)

Quartz.net使用Common.Logging,所以你的App.config / Web.config中有这样的东西:

<configSections>
    <sectionGroup name="common">
        <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
</configSections>

<common>
    <logging>
        <factoryAdapter type="Common.Logging.Simple.**youradapterhere**, Common.Logging">
            <arg key="level" value="ERROR" />
        </factoryAdapter>
    </logging>
</common>

请务必将 youradapterhere 更改为您正在使用的实际日志记录适配器,或者如果要完全禁用日志记录,请将NoOpLoggerFactoryAdapter更改。


**编辑:** 根据Ganesh的评论:

<sectionGroup name="common"> 
    <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/> 
</sectionGroup> 
<common>  
    <logging>  
        <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">  
            <arg key="configType" value="INLINE"/>  
            <arg key="configFile" value="filename"/>  
            <arg key="level" value="ERROR" /> <!-- add this line here -->
        </factoryAdapter>  
    </logging> 
</common>

**编辑2:**

为了那些不想阅读评论的人的好处,日志级别实际上是在log4net root config中设置的:

<log4net>
    <root>
        <level value="DEBUG" /> <!-- This is the value that needed changing -->
        <appender-ref ref="Console" />
        <appender-ref ref="RollingFile" />
    </root>
</log4net>

答案 3 :(得分:2)

在我要关闭Quartz.net日志记录的情况下,我只是在配置调度程序的C#代码中添加了此属性。

LogProvider.IsDisabled = true;

总视图:

public static async void Start()
    {

        LogProvider.IsDisabled = true;
        ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
        IScheduler scheduler = await schedulerFactory.GetScheduler();
        await scheduler.Start();

        IJobDetail job = JobBuilder.Create<SendNotificationJob>().Build();

        ITrigger trigger = TriggerBuilder.Create()

            .WithDailyTimeIntervalSchedule
              (s =>
                 s.WithIntervalInSeconds(1)
                .OnEveryDay()
                .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(0, 0))
              )
            .Build();

        await scheduler.ScheduleJob(job, trigger);
    }

并且不要忘记使用:

using Quartz.Logging;

答案 4 :(得分:0)

对于使用NLog(nlog.config)时完全不需要Quartz记录的用户(即在作业代码中自己记录日志):

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogLevel="info"
      internalLogFile="path_to_nlog_log_file">

  <!-- the targets to write to -->
  <targets async="true">
    <target name="database" type="Database">
      <commandText>
        <!-- insert into some table -->
      </commandText>
      <!-- parameters here -->
    </target>    

    <target xsi:type="Null" name="blackhole" />
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <!--Skip Microsoft/Quartz logs and so log only own logs-->
    <logger name="Microsoft.*" minlevel="Trace" writeTo="blackhole" final="true" />
    <logger name="Quartz*" minlevel="Trace" maxlevel="Info" writeTo="blackhole" final="true" />
    <logger name="*" minlevel="Debug" writeTo="database" />
  </rules>
</nlog>

答案 5 :(得分:0)

如果您只想删除大量的信息和调试日志,我会添加

<logger name="Quartz.*" minlevel="Error" writeTo="default" final="true"/>

基于this的答案。这基本上可以确保写入Quartz组装错误和致命错误,而不会写入其他日志。