4

ロギングで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 を使用しています。まだ問題が発生している理由はありますか?

4

3 に答える 3

3

まず、すべてのパッケージ (アセンブリ) が更新されていることを確認します。これは私のナゲット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.Log4NetQuartz.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" />
于 2013-03-06T10:19:08.880 に答える
0

Common.Logging ライブラリを Quartz ライブラリと同じフォルダに配置してみてください (C5 もそこにあるはずです)。私の知る限り、Visual Studio 内から参照する必要はありません。

于 2013-03-08T08:57:01.873 に答える