Domanda

Sto usando Quartz.NET per la pianificazione di alcune attività personalizzate nella nostra applicazione. Tutto funziona bene, tranne che registra una ventina di voci di debug in un secondo.

Non so come disattivare la registrazione di debug. Qualsiasi aiuto sarebbe molto apprezzato come ho cercato di ricerca nella rete senza fortuna.

Le voci di debug assomigliano il seguente

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
È stato utile?

Soluzione

Quartz.net utilizza Common.Logging, quindi qualcosa di simile nel vostro 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>

Assicurati di cambiare il youradapterhere per l'adattatore di registrazione effettiva si sta utilizzando, o NoOpLoggerFactoryAdapter se si desidera disabilitare la registrazione di tutto.


** Edit: ** Sulla base di commento di 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>

** Edit 2: **

Per i benefici di coloro che non vogliono leggere i commenti, il livello di log è stato effettivamente impostato nella configurazione radice log4net:

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

Altri suggerimenti

Rytmis' risposta è grande se si decidere di ridurre tutta la tua registrazione che passa attraverso l'infrastruttura Common Logging.

Ma se avete più codice di registrazione attraverso la registrazione degli Common, e si vuole solo ridurre la quantità degli logging da quarzo ( e non dal resto del vostro codice ), quello che mi raccomando è questo :

Nel xml log4net config (app.config solito) probabilmente avete già qualcosa di simile:

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

Lascia che così com'è. E dopo che (o dovunque all'interno della sezione di configurazione <log4net>) basta aggiungere questo:

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

Questa sezione <logger> configurerà tutti i logger con lo spazio dei nomi "Quartz". Quindi in questo esempio quarzo sará registrato con il livello ERROR mentre il resto del mio app registrerà con il livello ALL.

Se qualcuno ha bisogno di fare questo in NLog basta aggiungere quanto segue come la regola superiore moste in NLog.Config

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

Si noti che questo sarà ancora lascia avvertire, errore, andare fatale per gli altri software se non si vuole che il cambiamento maxlevel="Info" a maxlevel="Fatal"

Per coloro che non vogliono quarzo accedendo a tutti (proprio la registrazione vale a dire al codice di posti di lavoro è sufficiente) quando si usa NLog (nlog.config):

<?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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top