26

この 質問 度か寄せられている ことは理解していますが、残念ながら、ログの構成を機能させることができませんでした。私はどこかで非常に小さな間違いを犯しているに違いありません。

.NET 4.5 MVC 4/EF 5 Web アプリケーションがあり、ログを機能させようとしています。ソリューションには 2 つのプロジェクトがあり、1 つは DAO とモデル オブジェクト用、もう 1 つは Web サイト用です。App.Config ファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" />
  </configSections>
  <connectionStrings>
    <add name="RebuildingTogetherEntities" connectionString="stuff..."/>
  </connectionStrings>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
  <log4net configSource="Log.config" />
</configuration>

同じ log4net セクションも Web.Config ファイルにコピーされています。

両方の AssemblyInfo.cs ファイルに次を追加しました。

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log.config", Watch = true)]

「出力ディレクトリにコピー」は、両方の Log.Config ファイルで true に設定されています。

ログを出力ファイルに追加する唯一の方法は、最初のログ ステートメントが実行される前に XmlConfigurator.Configure() を呼び出すことです。ロガーを最初に取得するときに、それを行うためのファサードを作成できると思いますが、それは間違っているように感じます。

XmlConfigurator を手動で呼び出さずにロガーを初期化するにはどうすればよいですか?

4

2 に答える 2

34

私はまったく同じ問題に直面しました。ご指摘のとおりXmlConfigurator、 に行を含めるときに明示的に呼び出す必要はありませんAssemblyInfo.cs。問題は、log4net の最初の使用がその行を持たないアセンブリにある場合に発生します。私の場合、Topshelf.Log4NetNuGet パッケージを使用していました。アプリケーションがログに記録した最初のログ行はそれを介したものでした。

アプリの早い段階で行をログに記録するか、何もログに記録する必要がない場合は、私が行ったことを行い、アプリケーションのエントリ ポイントに次を追加します。

LogManager.GetLogger(typeof(Program));
于 2015-09-24T17:06:18.980 に答える