문제
응용 프로그램에서 몇 가지 사용자 정의 작업을 예약하기 위해 Quartz.net을 사용하고 있습니다. 1 초 안에 약 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
해결책
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>
다른 팁
Rytmis의 대답 공통 로깅 인프라를 통해 발생하는 모든 로깅을 줄이려면 훌륭합니다.
그러나 공통 로깅을 통해 더 많은 코드 로깅이있는 경우 Quartz에서 로깅의 탄약을 줄이려면 (나머지 코드가 아닙니다), 내가 추천하는 것은 이것입니다 :
log4net config xml에서app.config
일반적으로) 이미 다음과 같은 것이있을 것입니다.
<root>
<level value="ALL" />
<appender-ref ... />
...
</root>
그대로 두십시오. 그리고 그 후에 (또는 내부의 어디에나 <log4net>
구성 섹션) 추가하기 만하면됩니다.
<logger name="Quartz">
<level value="ERROR" />
</logger>
이것 <logger>
섹션은 네임 스페이스 "쿼츠"로 모든 로거를 구성합니다. 이 예에서는 쿼츠가 레벨로 로깅을합니다. ERROR
내 앱의 나머지 부분은 레벨로 로그인하지만 ALL
.
NLOG 에서이 작업을 수행 해야하는 경우 NLOG.config의 가장 많은 규칙으로 다음을 추가하십시오.
<!-- Disable Quartz info logging -->
<logger name="Quartz*" minlevel="Trace" maxlevel="Info" final="true" />
이것은 당신이 그 변화를 원하지 않으면 다른 로거에게 경고, 오류, 치명적인 경고를 계속할 것입니다. maxlevel="Info"
에게 maxlevel="Fatal"
nlog (nlog.config)를 사용할 때 쿼츠 로깅을 전혀 원하지 않는 사람들을 위해 (즉, Jobs Code 내에서 로깅이 충분합니다) :
<?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>