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ます。
アイデアが尽きた!