【问题标题】:Quartz.NET - no configuration section <common/logging> found - suppressing logging outputQuartz.NET - 找不到配置部分 <common/logging> - 抑制日志输出
【发布时间】:2013-02-24 15:38:10
【问题描述】:

我正在尝试使用 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 版。任何想法为什么我仍然遇到问题?

【问题讨论】:

  • 如果您遇到“无法创建类型”异常,它还应该包含内部异常,其中包含有关为什么无法创建类型的更多详细信息。

标签: log4net quartz.net


【解决方案1】:

首先检查您是否拥有所有软件包(程序集)更新。 这是我的 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>

我认为您使用了错误的附加程序。您似乎想将日志写入文件,但您使用的是 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" />

【讨论】:

  • 发布此答案后,Common.Logging.Log4Net 包已更改为使用不同的包来访问每个 Log4Net 版本,并且每个不同的包版本使用不同的程序集名称。因此,要使上面的 factoryAdapter 配置正常工作,您必须在程序集名称中包含版本号。因此,例如,如果您使用 Common.Logging.Log4Net1213,则需要在配置中包含以下内容:
【解决方案2】:

尝试将 Common.Logging 库与 Quartz 库放在同一个文件夹中(C5 也应该在那里)。据我所知,您不必在 Visual Studio 中引用它。

【讨论】:

    【解决方案3】:

    您可以安装Common.Logging.Log4Net1211 并更改应用设置如下

      <common>
        <logging>
          <factoryAdapter type="Common.Logging.Log4Net.Log4NetLoggerFactoryAdapter, Common.Logging.Log4Net1211">
            <arg key="configType" value="INLINE"/>
          </factoryAdapter>
        </logging>
      </common>
    

    请注意,dll 名称已更改为“Common.Logging.Log4Net1211”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-10
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 1970-01-01
      相关资源
      最近更新 更多