35

log4net で (RollingFileAppender を使用して) ログ ファイルを共通のアプリケーション データ フォルダーのサブフォルダー (例: C:\Documents and Settings\All Users\Application Data\Company\Product\Logs) に書き込むようにします。
ただし、Win XP では、このフォルダーを指定する環境変数はありません。ありますが%ALLUSERSPROFILE%%APPDATA%のようなものはありません%ALLUSERSAPPDATA%
プログラム的には を使用できますEnvironment.SpecialFolder.CommonApplicationDataが、次のように log4net 構成に入れる必要があります。

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
   <file value="%ALLUSERSAPPDATA%\Company\Product\Logs\error.log" />
</appender>

OK、セットアップでこれを定義できますが、誰かがより良いアイデアを思いつくかもしれません?

4

6 に答える 6

33

これを使用するだけです:

<param name="File" value="${ALLUSERSPROFILE}/Company/Product/Logs/error.log"/>

それはうまくいきます。


この行は、現在のアペンダー構成に簡単に挿入できます。

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
   <param name="File" value="${ALLUSERSPROFILE}/Company/Product/Logs/error.log"/>
</appender>
于 2009-12-11T17:27:40.697 に答える
12

pilif がリンクしているlog4netメーリング リストの完全なコードは次のとおりです。

基本的な方法は、log4net 構成ファイルのカスタム パターン コンバーターを実装することです。

まず、このクラスをプロジェクトに追加します。

public class SpecialFolderPatternConverter : log4net.Util.PatternConverter
{
    override protected void Convert(System.IO.TextWriter writer, object state)
    {
        Environment.SpecialFolder specialFolder = (Environment.SpecialFolder)Enum.Parse(typeof(Environment.SpecialFolder), base.Option, true);
        writer.Write(Environment.GetFolderPath(specialFolder));
    }
}

次に、FileAppender の File パラメータを次のように設定します。

<file type="log4net.Util.PatternString">
    <converter>
      <name value="folder" />
      <type value="MyAppName.SpecialFolderPatternConverter,MyAppName" />
    </converter>
    <conversionPattern value="%folder{CommonApplicationData}\\SomeOtherFolder\\log.txt" />
</file>

基本的には、 SpecialFolderPatternConverter クラスを指す、%folder呼び出されたコンバーターを調べるように指示します。folder次に、そのクラスを呼び出しConvertて、CommonApplicationData (または任意の) 列挙値を渡します。

どうやら、log4net の次のリリース (1.2.11) では、こちらで説明されているように、より簡単な方法があるようです

于 2010-12-08T16:36:42.677 に答える
3

完全で実用的なソリューション - 私の Log4net.config ファイルの内容。Log4Net の実際のバージョンでは、独自のパターン コンバーターを作成する必要はもうありません。

<?xml version="1.0"?>
<log4net>
  <root>
    <level value="INFO" />
    <appender-ref ref="LogFileAppender" />
  </root>
  <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
    <file type="log4net.Util.PatternString" value="%envFolderPath{CommonApplicationData}\\MyProject\\Logs\\log.txt" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="100MB" />
    <layout type="log4net.Layout.PatternLayout">
      <ConversionPattern type="log4net.Util.PatternString" value="%%-5p %%d{yyyy-MM-dd HH:mm:ss} - %%m%%n" />
    </layout>
  </appender>
</log4net>
于 2014-06-12T18:09:31.217 に答える