C# アプリでは、ファイルを に書き込みますEnvironment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
。log4net ログファイルもそこに移動する必要があるため、application.conf
次のように定義しました。
<appender name="LogFile" type="log4net.Appender.RollingFileAppender">
<appendToFile value="true"/>
<file value="%USERPROFILE%\My Documents\MyApp\log.txt"/>
...snip...
</appender>
これは、英語以外の Windows を搭載した PC で実行するまでは機能します。そのため、SpecialFolder.MyDocuments
はフォルダを指しますMijn Documenten
が、ログは引き続き に移動しMy Documents
ます。ファイルが 2 つの場所にあるため、混乱が生じます。
ログを「実際の」マイ ドキュメント フォルダに書き込みたいと考えています。どうすればいいですか?
- のような環境変数を見つけようとしましたが
%USERPROFILE%
、マイ ドキュメントには存在しないようです。 - マイ ドキュメントの実際の場所を定義するレジストリ キーがありますが、からはアクセスできません
application.conf
。 File
次のように、プログラムでアペンダーのパラメーターをオーバーライドしようとしました。public static void ConfigureLogger() { XmlConfigurator.Configure(); Hierarchy hierarchy = (Hierarchy)log4net.LogManager.GetRepository(); foreach (var appender in hierarchy.Root.Appenders) { if (appender is FileAppender) { var fileAppender = appender as FileAppender; var logDirectory = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "MyApp"); var pathElements = fileAppender.File.Split(Path.DirectorySeparatorChar); var logFileName = pathElements.Last(); var fullLogFilePath = Path.Combine(logDirectory, logFileName); fileAppender.File = fullLogFilePath; } } }
これも機能しません。ロガーの内部を調べると、
File
プロパティは喜んで を報告しますMijn Documenten
が、その間、ログはまだ に移動しMy Documents
ます。
アイデアが尽きた!