私はlog4netを使用するWPFアプリケーションを持っています。私はVisual Studioでそれを実行すると、ログファイルは、期待どおりDebugまたはReleaseフォルダに作成されます。アプリの配備時にlog4netログファイルが書き込まれない
ただし、インストーラを作成してインストールされたアプリケーションを実行すると、ログファイルは作成されません。コードに次の行を追加しました。
string logFilePath = ((Hierarchy)LogManager.GetRepository())
.Root.Appenders.OfType<FileAppender>()
.FirstOrDefault()?.File;
using (StreamWriter sw = new StreamWriter(@"d:\log.log")) {
sw.WriteLine("Log file: " + logFilePath);
}
...私が期待した場所にログファイルが書き込まれていることを確認できるようにするためです。それは、ログファイルが私が予想したC:\Program Files (x86)\Physio Diary\PhysioDiaryClient.log
に書かれているはずだったことを私に示しました。
ただし、ファイルは存在しません。どんな考え?ここで
は、App.configファイルの先頭には、ファイルの一番下には、次のようになります...の間で
<startup>
<supportedRuntime version="v4.0"
sku=".NETFramework,Version=v4.5.2" />
</startup>
</configuration>
ビットがするすべてです...
<?xml version="1.0"
encoding="utf-8"?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net" />
</configSections>
<log4net>
<appender name="RollingFileAppender"
type="log4net.Appender.RollingFileAppender">
<param name="File"
value="PhysioDiaryClient.log" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="2" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-7level %logger - %message%newline%exception" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
ですアプリケーションが使用するWCFサービスを使用します。
誰でもいいですね。
編集:テストとして、App.configのログファイルパスをD:ドライブにハードコードしました(ハードコードされているため、アクセス許可の問題はありません)が、ファイルはまだ作成されていません。
一般的に言えばアプリケーションがそのディレクトリに書き込むことが許可されていないため、%ProgramFiles%ディレクトリをログ対象に設定しないでください。 – dymanoid
@dymanoid理想的には、ユーザーのローカルフォルダの顧客フォルダにログファイルを書きたいと思います。どのように私はそれをやろうと思った?私がD:ドライブへのパスをハード・コーディングしても、ファイルが書かれていないので、これは答えだとは確信していません。それでも、場所を最初に修正し、それが役立つかどうか確認する価値があります。ありがとう –