6

アセンブリ内のテキストファイルにログを記録するようにLog4Netをセットアップしようとしています(これはLog4Netを使用するのは初めてです)。エラーは発生していませんが、機能していません。出力をログに記録している行にブレークポイントを設定して、それらに到達したことを確認できますが、私が言ったように、何も起こりません。

どこが間違っているのですか?

packages.configファイルの<packages>属性内に次のものを追加しました。

  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender,log4net">
      <file value="c:\CTI\log.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %level %logger - %message%newline" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <levelMax value="FATAL" />
      </filter>
    </appender>

    <root>
      <level value="DEBUG"/>
      <appender-ref ref="FileAppender"/>
    </root>
  </log4net>
</configuration>

次の行を追加しましたAssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(Watch=true)]

NuGetを使用してLog4Netアセンブリを追加し、次のようにログを記録しています。

private log4net.ILog _Log;
_Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
_Log.Debug("FooBar");

私が言うように、エラーはありませんが、何も起こりません。

私は何が欠けていますか?

4

1 に答える 1

6

間違っていることの1つは、log4net構成セクションをnuget構成ファイル(packages.config)に追加していることです。

app / web configまたはappSettingsからポイントする別のファイルに構成を含めることができます。たとえば、構成はconfig.log4net(ファイルのcopy to output directory属性がに設定されているcopy always)というファイルにあり、app/に次のエントリを追加します。 web.config:

<add key="log4net.config" value="config.log4net"/>

Web /アプリの構成に依存したくない場合は、属性のConfigFileExtensionプロパティを次のように設定できます。XmlConfiguratorAttributeAssemblyInfo.cs

[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "log4net", Watch = true)]

次に、log4net構成ファイルに、exe / assemblyに構成済みの拡張子を加えたものと同じ名前を付けます。たとえばMyApplication.exe.log4net、またはMyLibrary.dll.log4net

間違っているもう1つのことは、アペンダーフィルターです。設定した範囲には、ログに記録する予定のDEBUGレベルは含まれていません。すべてのログレベルは次のとおりです。

ALL
DEBUG
INFO
WARN
ERROR
FATAL
OFF

ご覧のとおり、DEBUGとの間ではありませINFOFATAL

于 2012-07-19T13:17:40.280 に答える