quartz.net + common.logging을 사용하여 log4net 로그 파일이 작성되지 않았습니다.
-
13-11-2019 - |
문제
Quartz.net으로 작성된 Windows 웹 서비스에 로그인을 추가하려고합니다. log4net이있는 로그 파일을 작성하십시오.
내 app.config는 다음과 같습니다 :
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="common">
<section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging"/>
</sectionGroup>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<quartz>
<add key="quartz.scheduler.instanceName" value="CommerceScheduler" />
<add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
<add key="quartz.threadPool.threadCount" value="10" />
<add key="quartz.threadPool.threadPriority" value="Normal" />
</quartz>
<appSettings>
<add key="configpath" value="C:\Projects\SiteScheduler\SiteScheduler\Schedule.xml"/>
</appSettings>
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net">
<arg key="configType" value="INLINE" />
</factoryAdapter>
</logging>
</common>
<log4net>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" value="log.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
</layout>
</appender>
</log4net>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Common.Logging" publicKeyToken="af08829b84f0328e" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
.
i는 onstart () 이벤트에 로그를 씁니다.
protected override void OnStart(string[] args)
{
var log = LogManager.GetCurrentClassLogger();
// construct a scheduler factory
ISchedulerFactory schedFact = new StdSchedulerFactory();
// get a scheduler
var sched = schedFact.GetScheduler();
sched.Start();
log.Debug(m => m("Scheduler started"));
log.Debug(m => m("Load Schedules"));
ProcessLogs("Scheduler started");
LoadSchedules(sched);
}
.
프로세스가 잘 시작되지만 로그 파일은 없습니까?
누락 된
해결책
레벨을 factoryAdapter
에 추가해야합니다.
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4net">
<arg key="configType" value="INLINE" />
</factoryAdapter>
</logging>
</common>
.
와 올바른 common.logging 버전 사용을 사용하고 있는지 확인하십시오. Quartz.net 1.0.3은 일반적인 것입니다. offlogging 버전 1.2를 사용합니다.
업데이트 :
프로젝트는 이러한 어셈블리를 참조해야합니다.
- common.logging.dll (ver.1.2.0.0)
- common.logging.log4net.dll (Ver 1.2.0.2)
- log4net.dll (Ver 1.2.10.0)
이는 app.config입니다 (쿼츠 섹션 없음) :
.<configSections> <section name="quartz" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <sectionGroup name="common"> <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" /> </sectionGroup> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <common> <logging> <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net"> <arg key="configType" value="INLINE"/> </factoryAdapter> </logging> </common> <log4net> <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" > <param name="File" value="MyQuartzLog.txt" /> <param name="AppendToFile" value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="10MB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="LogFileAppender" /> </root> </log4net>
여기 (quartztestlog4net.zip).
이 프로젝트를 솔루션 sourceforge에서 다운로드했습니다.
공식 문서는 여기 .martinffx가 지적한 것처럼
<arg key="configType" value="INLINE" />
를 사용하는 경우 FactoryAdapter 섹션에서 레벨을 지정할 필요가 없으면,이 상황에서 log4net은 구성 파일에도 존재하는 XML 구성을 사용하기 만하면됩니다.
다른 팁
관리자로 서비스를 실행하지 않으면이 문제가 권한 문제가 될 수 있습니다.
log.txt 파일이 생성되는 위치를 지정하지 않으므로 c : \ windows \ system32와 같은 폴더에 파일을 만들려는 것이 가능하고 서비스에 해당 폴더에 대한 쓰기 액세스 권한이 없을 수도 있습니다..