94

log4net を使用しており、その構成を外部構成ファイルで指定したいと考えています (他のセクションで行ったように)。これを行うために、App.config の log4net セクションを次のように変更しました。

...
<section name="log4net" 
     type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
...
<log4net configSource="Log.config" />
...

そして、Log.Config ファイル (App.config と同じディレクトリ) には次のものがあります。

<log4net>
  <appender name="General" type="log4net.Appender.FileAppender">
    <file value="myapp.log" />
    <layout type="log4net.Layout.SimpleLayout" />
  </appender>
  <root>
    <appender-ref ref="General" />
  </root>
</log4net>

ただし、アプリを実行すると、ログ ファイルは作成されません (ログは記録されません)。コンソールに出力されるエラー メッセージはありません。

Log.config ファイルの内容を App.config に戻すと (上記の最初のコード行を置き換えます)、期待どおりに動作します。外部ファイルで機能しない理由は何ですか?

4

13 に答える 13

120

AssemblyInfo.csファイルに次の属性がありますか?

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

ロギング機能を必要とする各クラスの開始時に、次のようなコードを記述します。

private static readonly ILog log = 
LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

これと他の情報を含むブログ投稿がここにあります

于 2009-01-15T08:11:00.203 に答える
42

この問題には未解決の欠陥があります。Log4Net は、構成要素の configSource 属性をサポートしていません。純粋な構成ファイル ソリューションを使用するには、appSettings で log4net.Config キーを使用します。

ステップ 1: 通常の構成セクション定義を含めます。

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>

ステップ 2: appSettings でマジック log4net.Config キーを使用します。

<appSettings>
      <add key="log4net.Config" value="log4net.simple.config" />
</appSettings>

ステップ 3: configSource の処理を​​修正するパッチを提供します。

于 2009-09-25T20:10:16.033 に答える
28

逃したステップは

log4net.Config.XmlConfigurator.Configure(); 

これにより、configSourceが使用されます。GetLogger()を呼び出す前に、必ず1回呼び出してください。

于 2011-04-11T21:09:40.840 に答える
22

log4net.config ファイルが次のプロパティで設定されていることを確認してください。

ビルド アクション: コンテンツ

出力ディレクトリにコピー: 常にコピー

于 2010-07-28T12:38:56.347 に答える
2

この問題に注意してください...

私の場合、すべてが正しく構成されていました。問題は、Visual Studio 2013 内で Web Deploy を使用してサイトをWinHost.comにアップロードし、サーバーのACLをリセットしたことです。これにより、フォルダーとファイルに対するすべてのアクセス許可が取り消されました。log4net はファイルを書き込むことができませんでした。

詳細については、こちらをご覧ください。

Web Deploy/MSBuild がサーバーのアクセス許可を台無しにしないようにする方法

そこのサポート チームに ACL をリセットするよう依頼したところ、log4net がログを吐き出し始めました。:)

于 2014-07-07T18:26:44.963 に答える
1

deploy ディレクトリにコピーされた log4net.config という外部構成ファイルがあると仮定すると、次のように構成できます。

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Reflection;

using log4net;

namespace MyAppNamespace {
    static class Program {
        //declare it as static and public so all classes in the project can access it
        //like so: Program.log.Error("got an error");
        public static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));

        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main() {
             //configure it to use external file
            log4net.Config.XmlConfigurator.Configure(new Uri(Application.StartupPath + "\\log4net.config"));
            //use it
            log.Debug("#############   STARING APPLICATION    #################");


            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new FormMain());
        }
    }
}
于 2013-04-16T00:29:57.330 に答える
1

私は持っていることに加えて、同じ問題を抱えていました

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net")]

実行中のプロジェクトでは、参照プロジェクトに次の行もありました。

[assembly: log4net.Config.XmlConfigurator]

参照プロジェクトでこの行を削除すると、ログが表示され始めます。

于 2014-09-21T14:03:03.367 に答える
1
  1. AssemblyInfo.csに以下を追加

    [アセンブリ: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config")]

  2. log4net.config がプロジェクトに含まれていることを確認してください

  3. log4net.configのプロパティで

CopyToOutputDircoryタグをCopyIfNewerタグに変更

  1. ログレベルレベルを再確認するvalue="ALL"
于 2018-10-10T13:16:39.057 に答える
0

@ Mitch、[assembly:...]宣言のあるファイルがありますが、ConfigFileプロパティがありませんでした。

追加してLog.configにポイントすると、動作を開始しました。他のすべての構成セクション(つまり、AppSettings)と同じように機能し、変更なしで外部構成ファイルを受け入れると思いました。

グローバル静的ログプロバイダーでラップしているため、2番目のステートメントはありません。

于 2009-01-15T08:21:07.313 に答える
0

また、Web アプリでは、bin フォルダーではなくルート ディレクトリを参照することにも注意してください。そのため、そこに構成ファイルを配置するようにしてください。

于 2019-11-27T07:05:22.680 に答える