Кварцевый планировщик регистрирует через log4net неправильный файл журнала - PullRequest
0 голосов
/ 10 мая 2018

У меня есть два проекта: один (MyApp.QuartzImplementation), где выполняется вся работа по инициализации и работе с кварцем, в то время как другой проект (MyApp.XYZApi) выполняет другие действия.

У меня есть отдельные файлы журналов log4net для каждогопроект.Проблема, с которой я сталкиваюсь, заключается в том, что журналы, связанные с планировщиком, поступают в журналы моего основного проекта (MyApp.XYZApi), хотя я инициализировал планировщик из другого проекта (MyApp.QuartzImplementation).

Примеры журналов, которые поступают вОсновные файлы журнала проекта:

2018-05-10 17:01:06.034 INFO    TANG_DM N1  16              StdSchedulerFactory.Log     Quartz scheduler 'DBScheduler' initialized
2018-05-10 17:01:06.050 INFO    TANG_DM N1  16              StdSchedulerFactory.Log     Quartz scheduler version: 3.0.4.0
2018-05-10 17:01:06.087 DEBUG   TANG_DM N1  16              SimpleSemaphore.Log     Lock 'TRIGGER_ACCESS' is desired by: 75af30b2-9658-4b61-b2ca-6bf3d74f6486
2018-05-10 17:01:06.087 DEBUG   TANG_DM N1  16              SimpleSemaphore.Log     Lock 'TRIGGER_ACCESS' is being obtained: 75af30b2-9658-4b61-b2ca-6bf3d74f6486
2018-05-10 17:01:06.103 DEBUG   TANG_DM N1  16              SimpleSemaphore.Log     Lock 'TRIGGER_ACCESS' given to: 75af30b2-9658-4b61-b2ca-6bf3d74f6486
2018-05-10 17:01:06.119 DEBUG   TANG_DM N1  15              DeviceDataManager.StartOtpExpiryJob     Sleeping For 1 Hours
2018-05-10 17:01:06.188 DEBUG   TANG_DM N1  16              SQL.Log     Prepared SQL: UPDATE QRTZ_TRIGGERS SET TRIGGER_STATE = @newState WHERE SCHED_NAME = 'DBScheduler' AND (TRIGGER_STATE = @oldState1 OR TRIGGER_STATE = @oldState2)
2018-05-10 17:01:06.266 DEBUG   TANG_DM N1  16              SQL.Log     Prepared SQL: UPDATE QRTZ_TRIGGERS SET TRIGGER_STATE = @newState WHERE SCHED_NAME = 'DBScheduler' AND (TRIGGER_STATE = @oldState1 OR TRIGGER_STATE = @oldState2)
2018-05-10 17:01:06.272 INFO    TANG_DM N1  16              JobStoreTX.Log      Freed 0 triggers from 'acquired' / 'blocked' state.
2018

Моя конфигурация log4net выглядит следующим образом

<?xml version="1.0" encoding="utf-8" ?>
<log4net>  
  <appender name="MyAppXYZApi" type="log4net.Appender.RollingFileAppender" >
    <file value="..\\Logs\\XYZ_DM_N1" />
    <encoding value="utf-8" />
    <appendToFile value="true" />
    <datePattern value="_yyyyMMdd'.log'" />
    <staticLogFileName value="false" />
    <rollingStyle value="Composite"/>
    <maxSizeRollBackups value="-1"/>
    <maximumFileSize value="10MB"/>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="DEBUG" />
      <levelMax value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff}&#9;%p&#9;XYZ_DM&#9;N1&#9;%t&#9;%property{ExternalIP}&#9;%property{ContextId}&#9;%property{ContextValue}&#9;%c{1}.%M&#9;%property{SessionId}&#9;%m%n" />
    </layout>
  </appender>
  <appender name="QuartzScheduling" type="log4net.Appender.RollingFileAppender" >
    <file value="..\\Logs\\XYZ_QuartzScheduling_N1" />
    <encoding value="utf-8" />
    <appendToFile value="true" />
    <datePattern value="_yyyyMMdd'.log'" />
    <staticLogFileName value="false" />
    <rollingStyle value="Composite"/>
    <maxSizeRollBackups value="-1"/>
    <maximumFileSize value="10MB"/>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <filter type="log4net.Filter.LevelRangeFilter">
      <acceptOnMatch value="true" />
      <levelMin value="DEBUG" />
      <levelMax value="FATAL" />
    </filter>
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%d{yyyy-MM-dd HH:mm:ss.fff}&#9;%p&#9;XYZ_QuartzScheduling&#9;N1&#9;%t&#9;%property{ExternalIP}&#9;%property{ContextId}&#9;%property{ContextValue}&#9;%c{1}.%M&#9;%property{SessionId}&#9;%m%n" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="MyAppXYZApi" />
  </root>
  <logger additivity="false" name="MyApp.XYZApi">
    <level value="ALL"/>
    <appender-ref ref="MyAppXYZApi" />
  </logger> 
  <logger additivity="false" name="MyApp.QuartzImplementation">
    <level value="ALL"/>
    <appender-ref ref="QuartzScheduling" />
  </logger>
</log4net>

Пожалуйста, дайте мне знать, если я могу что-то сделать для планировщиков журналов кварца, которые будут записаны в конкретный журналfile

Когда я добавил% logger, как предложено ниже, кварцевые пространства имен в журналах

Quartz.Util.DBConnectionManager 
Quartz.Impl.StdSchedulerFactory 
Quartz.Simpl.TaskSchedulingThreadPool 
Quartz.Core.SchedulerSignalerImpl 
Quartz.Impl.AdoJobStore.StdAdoDelegate 
Quartz.Core.QuartzScheduler 
Quartz.Impl.AdoJobStore.SimpleSemaphore 
Quartz.Impl.AdoJobStore.MisfireHandler 
Quartz.Core.QuartzSchedulerThread 
Quartz.SQL 
Quartz.Impl.AdoJobStore.JobStoreTX 

Могу ли я каким-то образом поместить их все в один единственный appender

1 Ответ

0 голосов
/ 15 мая 2018

Похоже, вам нужно изменить

<logger additivity="false" name="MyApp.QuartzImplementation">

до

<logger additivity="false" name="Quartz">
...