2016-11-03 31 views
2

私は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:ドライブにハードコードしました(ハードコードされているため、アクセス許可の問題はありません)が、ファイルはまだ作成されていません。

+2

一般的に言えばアプリケーションがそのディレクトリに書き込むことが許可されていないため、%ProgramFiles%ディレクトリをログ対象に設定しないでください。 – dymanoid

+1

@dymanoid理想的には、ユーザーのローカルフォルダの顧客フォルダにログファイルを書きたいと思います。どのように私はそれをやろうと思った?私がD:ドライブへのパスをハード・コーディングしても、ファイルが書かれていないので、これは答えだとは確信していません。それでも、場所を最初に修正し、それが役立つかどうか確認する価値があります。ありがとう –

答えて

4

@dymanoidのおかげで私は正しい方向に向いてくれました。 log4netドキュメントはこの分野では少し弱いですが、設定ファイルで通常の環境変数を使用できることを指摘したthis answerが見つかりました。このlist of environment variablesの助けを借りて

、私は次のようになってしまった...

<param name="File" 
     value="${LOCALAPPDATA}\Physio Diary\PhysioDiaryClient.log" /> 

これは正しくC:\Users\MyUsername\AppData\Local\Physio Diary\PhysioDiaryClient.log

にファイルを書き込むには、これは誰かに役立ちます願っています。

関連する問題