2012-04-04 3 views
23

.NETでlog4net 1.2.11.0を使用すると、どのようにRollingFileAppenderにUTCの日付を出力させることができますか?残念ながら、これは動作していないLog4Net:UTC時刻でのログ

<dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" /> 

は、Apacheによると、限り簡単にする必要があります。

私log4netの構成の全体は次のとおりです。

私はlog4netのDLLはRollingFileAppenderの内部プライベートクラスとして型「UniversalDateTime」を持っていることがわかります逆コンパイラを使用して
<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
     <file value="Log-.txt" /> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMdd"/> 
     <PreserveLogFileNameExtension value="true" /> 
     <staticLogFileName value="false"/> 
     <appendToFile value="true" /> 
     <maxSizeRollBackups value="10" /> 
     <dateTimeStrategy type="log4net.Appender.RollingFileAppender+UniversalDateTime" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date %-5level %logger - %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <!-- Options are "ALL", "DEBUG", "INFO", "WARN", "ERROR", "FATAL" and "OFF". --> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFile" /> 
    </root> 
    </log4net> 

答えて

28

%dateを%utcdateに置き換えます。

例:この例では

<conversionPattern value="%utcdate{ABSOLUTE} UTC %c{1} - %m%n" /> 

は、{ABSOLUTE}は日付形式指定子である:詳細はThe Log4Net PatternLayout documentationを参照します。

私はdateTimeStrategyが日付でローリングするときに使用する深夜(ローカルまたはUTC)を判断することとさらに関係がありますが、これについてはわかりません。

+1

これは、私がUTCの日付を印刷するために探していたものです。そして、私はあなたがdateTimeStrategyがファイルのロールオーバーの日付であることについて正しいと思います。そのプロパティに関するドキュメンテーションの横にはありますが、あなたがそれを言及して以来、それは正しいようです。ありがとうございました。 –

31

AdoNetAppenderを使用すると、変更が大きく異なることに注意してください。その場合、あなたは、パラメータ設定を変更する必要があります。

<parameter> 
    <parameterName value="@log_date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawUtcTimeStampLayout" /> 
    <!--<layout type="log4net.Layout.RawTimeStampLayout" />--> 
</parameter> 

この変更は、現在LOGDATEフィールドの正しいUTC値を書き込みます。

+2

感謝@Ed DeGagne、私はコピー/貼り付けのソリューションが大好き! – Pingi

関連する問題