19

我正在使用 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
4

6 回答 6

26

如果您想减少通过通用日志记录基础设施的所有日志记录,Rytmis 的回答非常棒。

但是,如果您通过 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 将使用 level 进行记录,ERROR而我的应用程序的其余部分将使用 level 进行记录ALL

于 2011-11-01T21:16:54.460 回答
14

如果有人需要在 NLog 中执行此操作,只需在 NLog.Config 中添加以下作为最顶层的规则

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

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

于 2014-10-22T12:30:28.240 回答
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 根配置中设置的:

<log4net>
    <root>
        <level value="DEBUG" /> <!-- This is the value that needed changing -->
        <appender-ref ref="Console" />
        <appender-ref ref="RollingFile" />
    </root>
</log4net>
于 2009-05-18T11:30:46.763 回答
5

在我关闭 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;
于 2020-05-05T09:17:53.863 回答
2

对于那些在使用 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>
于 2019-01-14T08:15:39.547 回答
0

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

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

基于这个答案。这基本上保证了 Quartz 汇编错误和致命错误被写入,而其他日志则没有。

于 2020-11-30T08:19:27.623 回答