1

別の構成ファイルを使用するように log4net を構成しています。これを行うには、AssemblyInfo.cs ファイルに次の行を追加します。

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

この場所はプログラム ディレクトリに対して相対的ですが、ユーザーの APPDATA フォルダーに置きたいと思っています。何かのようなもの:

ConfigFile = @"C:\Users\UserName\AppData\Roaming\MyApplication\Logging\Log4Net.config"

問題は、これが相対パスではないことです。つまり、別のユーザー名がサポートされていないなどです。私が本当に欲しいのは次のとおりです。

ConfigFile = @"%APPDATA%\MyApplication\Logging\Log4Net.config"

もちろん、これは機能しません。私はこれがそれを修正することを望んでいました:

ConfigFile = @"${APPDATA}\MyApplication\Logging\Log4Net.config"

またはこれ:

ConfigFile = Path.Combine(
    Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
    @"MyApplication\Logging\Log4Net.config")

運がない。最初の 2 つは相対パスの一部であると考えているだけですが、後者は AssemblyInfo にあるため拒否されます。

エラー 1 属性引数は、定数式、typeof 式、または属性パラメーター型の配列作成式でなければなりません C:\Source\ ... \Tools\Logging\Logging\Properties\AssemblyInfo.cs 39 56 Logging

起動時にカスタム パスを使用するようにアプリケーションを構成する必要がありますか? コードをできるだけ不可知論的にしたいので、私は本当にしたくありません。

4

1 に答える 1

0

起動時に構成を実行することになりました。ロギング ファサードの実装で、次のように言いました。

class Log4NetLogger : ILogger
{
    public Log4NetLogger(...)
    {
        if (!m_Configured){
            string configFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"MyApplication\Logging\Log4Net.config");
            log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configFile));
            m_Configured = true;
        }
        ...
    }
    ...
}
于 2012-08-28T09:42:22.340 に答える