我正在尝试使用 Quartz 2.1.2 进行日志记录,但在调试时我不断收到以下输出:
找不到配置部分 - 禁止记录 输出
这是我的 App.config 文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<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"/>
<arg key="configFile" value="c:\Scheduler.log"/>
<arg key="level" value="INFO" />
</factoryAdapter>
</logging>
</common>
<log4net>
<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%d [%t] %-5p %l - %m%n" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="EventLogAppender" />
</root>
</log4net>
</configuration>
以下是实例化我的调度程序的代码:
private IScheduler scheduler;
public JobScheduler()
{
ISchedulerFactory schedulerFactory = new StdSchedulerFactory();
this.scheduler = schedulerFactory.GetScheduler();
this.scheduler.Start();
}
我做错了什么?
更新
好的,我做错了一件事就是在我的单元测试项目中没有包含App.config文件。一旦我这样做,我得到了一个不同的错误:
无法创建类型'Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter,Common.Logging.Log4Net'
我没有在Common.Logging命名空间中看到Log4Net,所以我通过包管理器添加了DLL,但我仍然得到相同的错误。我使用Common.Logging版本2.1.2。我仍然有问题的任何想法?
答案 0 :(得分:3)
首先检查您是否拥有所有包(程序集)更新。 这是我的 nuget packages.config:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Common.Logging" version="2.1.2" targetFramework="net35" />
<package id="Common.Logging.Log4Net" version="2.0.1" targetFramework="net40" />
<package id="log4net" version="1.2.10" targetFramework="net40" />
<package id="Quartz" version="2.1.2" targetFramework="net35" />
</packages>
我估计你必须强制更新Common.Logging.Log4Net
因为Quartz.net没有下载最新版本。
然后检查 App.config 。你应该有这个绑定:
<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.1.2.0" newVersion="2.1.2.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
我认为你正在使用错误的appender。您似乎想要将日志写入文件,但是您正在使用 EventLogAppender 。
如果您想使用文件系统,可以尝试使用以下配置部分:
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net">
<arg key="configType" value="INLINE" />
<arg key="level" value="INFO" />
</factoryAdapter>
</logging>
</common>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
<param name="File" value="c:\Scheduler.log" />
<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="INFO" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
您尝试在该文件夹中写入权限时可能会遇到问题。如果你的应用改变了这个,你想把你的日志放在bin文件夹中:
<param name="File" value="Scheduler.log" />
答案 1 :(得分:0)
尝试将Common.Logging库放在与Quartz库相同的文件夹中(C5也应该在那里)。据我所知,您不必在Visual Studio中引用它。
答案 2 :(得分:0)
您可以安装Common.Logging.Log4Net1211并更改appsetting,如下所示
<common>
<logging>
<factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1211">
<arg key="configType" value="INLINE"/>
</factoryAdapter>
</logging>
</common>
请注意,dll名称已更改为“Common.Logging.Log4Net1211”。