2016-11-29 32 views
0

解決策(関連するstackoverflowに関する質問を含む)を広範囲に検索しましたが、まだ問題を解決する回答が見つかりません。私は仕事のプロジェクトでlog4netを使用していて、Visual Studioでプログラムを実行するとログファイルを取得します。 msiインストーラ(wix)を使用してプログラムをインストールすると、ログファイルが取得されません。最初に試したことのあるものを列挙し、続いて自分のコードを編集したものを示します。log4netインストール時にログファイルが作成されない

また、「appname」とはどこでも、私は実際にはappnameを置かず、単にプロジェクト名を投稿しないようにしました。

  1. 私は$ {USERPROFILE} \のAppData \ローカル[appnameの]ディレクトリにログファイルを配置することだ、パーミッションは問題ではありません。

  2. インストールされているバージョンに存在する設定ファイルはapp.configではなくappname.exe.configなので、Assemblyinfo.csアセンブリステートメントをappname.exe.configに変更しました。これはしかし、私の問題を解決していない、それはまだビジュアルスタジオを介して実行中に動作し、インストールされているバージョンはありません。

  3. log4net.dllとlog4net.xmlをインストールディレクトリに配信するようにproduct.wxsを変更しました。 (これを忘れて、アプリが起動しないので、戻ってきて追加しました)まだ変更はありません。

log4netを使用して1つのソリューション内に5つのプロジェクトがあります。私は[assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config", Watch = true)]を使用していた

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

が、インストールディレクトリとbinに配置された変更設定ファイル名にこれを変更:assemblyinfo.csファイルのすべてには、以下の持っています。 app.configをの内部

(すべての可能なタイプミスを言い訳、私のdevのマシンがairgappedされ、私は、コードをコピー&ペーストすることはできません):

<configuration> 
    <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <log4net> 
     <root> 
      <level value="ALL"/> 
      <appender-ref ref="MyAppender"/> 
     </root> 
     <appender name="MyAppender" type="log4net.Appender.FileAppender"> 
      <file value="${USERPROFILE}\AppData\Local\appname\appname.log"/> 
      <appendToFile value="true"/> 
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date %level - %message%newline"/> 
      </layout> 
     </appender> 
    </log4net> 
</configuration> 

と私はロガーを使用して、私のC#コードで:

あなたの構成があなたのApp.configファイルである場合
private static readonly log4net.ILog Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 

答えて

1

、あなただけ使用することができます。

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

を使用すると、SPEときファイルを作成すると、log4netはlog4net要素をxmlルート要素として認識します。あなたのapp.configには当てはまりません。

+0

ありがとうございます!それで、私がファイルを指定した理由は、Log4Netを統合するときに最初にやったトラブルシューティングによるものでした。何らかの理由で私は上記のステートメントでログファイルを取得していませんでした。私は何かを見逃しているかもしれませんが、VSで動作している間に動作し、インストールされた後に動作します。私が他の答えで見つけられなかった重要な情報は、あなたが明示的にassemblyinfo.csで設定ファイルを指定すると、log4net要素をルートとして期待するlog4netでした。 – Josh

+0

Peter、私は最近、あなたが単一の 'Execute'メソッド(または何らかの名前)で' ICommand'インターフェースについて書いた記事を読んで、AOPを実装するための手段としてデコレータと戦略を使っていますが、それを再び見つけてください。私のためのリンクを提供できますか? – ErikE

0

@erike私はそれが私のものかどうかはわかりません。だから私はあなたのためのリンクがありません。

関連する問題