ファイル名に日付を含むLog4netローリング日次ファイル名


回答:


102

Log4net構成ファイルで、RollingFileAppenderで次のパラメーターを使用します。

<param name="DatePattern" value="dd.MM.yyyy'.log'" />

27
これがconfig要素に昇格されたようです:<datePattern value = "dd.MM.yyyy'.log '" />乾杯!
longda 2013年

3
@mstaessen <preserveLogFileNameExtension value="true" />は正しい構文であり、これは素晴らしい答えです。損失は​​どのように発生しましたか?
ラリーB

1
私が正しく思い出せば、このようになりました。起動時に、log4netはローリングシーケンスの最初のファイル名を生成します。そのファイルが既に存在することを検出し、2番目のファイルにロールすることを決定しますが、そのファイルもすでに存在する場合、ロールすることは決定せず、そのファイルをクリアして、2番目のログファイルのすべてを上書きします。クリアされた時間枠のログが必要になるまで、まったく気付かれません...
mstaessen

206
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
  <file value="logs\" />
  <datePattern value="dd.MM.yyyy'.log'" />
  <staticLogFileName value="false" />
  <appendToFile value="true" />
  <rollingStyle value="Composite" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="5MB" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
  </layout>
</appender>

@Munがしたように、問題を解決するためのパラメーターの要点を強調する必要があると思います。しかし、私もあなたの答えに投票しました。
RDeveloper 2016

1
私のために機能したのは、staticLogFileName要素(およびfile要素のvalue属性に注意)と組み合わせたdatePattern要素でした
Michhes

完全な答え!
Nagesh

32

RollingLogFileAppenderの場合は、次の要素と値も必要です。

<rollingStyle value="Date" />
<staticLogFileName value="false" />

3
これは機能しますが、ファイル拡張子の後に日付を追加します。たとえば、Error.log20111104のようなログファイルを取得します-ファイル名をもう少しよくフォーマットする方法を誰かが知っていますか?
LostNomad311

ここでは、より良いファイル名をフォーマットする方法は次のとおりです。stackoverflow.com/questions/615092/...
LostNomad311

staticLogFileNameは何に使用されますか?日が終わった後にログファイルを新しい名前にロールバックしたいだけです。毎回特定のログモニターを使用したい。

21

Log4Net 1.2.13を使用して、次の構成設定を使用して、ファイル名に日時を許可します。

<file type="log4net.Util.PatternString" value="E:/logname-%utcdate{yyyy-MM-dd}.txt" />

次の規則でファイルを提供します: logname-2015-04-17.txt

これを使用する場合は、通常、1日あたり1つのログを保持するために次のようにするのが最善です。

<rollingStyle value="Date" />
<datePattern value="yyyyMMdd" />

ファイルのサイズが問題になる場合、次の例では、新しい日が始まるまで、サイズが5MBのファイルを500個許可します。CountDirectionを使用すると、最新ではないファイルの昇順または降順の番号付けが可能になります。

 <maxSizeRollBackups value="500" />
 <maximumFileSize value="5MB" />
 <rollingStyle value="Composite" />
 <datePattern value="yyyyMMdd" />
 <CountDirection value="1"/>
 <staticLogFileName value="true" />

18

私は最終的に使用しました( '.log'ファイル名と 'myfilename_'の前後の一重引用符に注意してください):

  <rollingStyle value="Date" />
  <datePattern value="'myfilename_'yyyy-MM-dd"/>
  <preserveLogFileNameExtension value="true" />
  <staticLogFileName value="false" />
  <file type="log4net.Util.PatternString" value="c:\\Logs\\.log" />

これは私に与えます:

myfilename_2015-09-22.log
myfilename_2015-09-23.log
.
.

preserveLogFileNameExtensionここで
Dmitry Karpenko

13

私はすべての答えを試しましたが、何かが欠けていて、期待どおりに機能していませんでした。

次に、各回答で与えられたヒントを少し試し、次の設定で成功しました:

<appender name="RollingActivityLog" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="C:\temp\LOG4NET_Sample_Activity.log" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <staticLogFileName value="false" />
  <preserveLogFileNameExtension value="true" />
  <datePattern value="-yyyyMMdd" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %-5level - %message%newline" />
  </layout>
</appender>

他のパラメーターの組み合わせの問題は、最新のファイルに時間パターンがなかったか、毎日.log20171215新しいファイル時間(および新しいファイルタイプ!)を作成する時間パターンが追加されたこと、または両方の問題が発生したことです。

この設定により、次のようなファイルが得られます。

LOG4NET_Sample_Activity-20171215.log

これが私が欲しかったものです。


要約する:

  • <file value=...属性に日付パターンを入れず、で定義するだけdatePatternです。

  • preserveLogFileNameExtension value属性がに設定されていることを確認してくださいtrue

  • staticLogFileName 値がに設定されていることを確認してくださいfalse

  • rollingStyle属性をに設定しますDate


また、rollingStyleをCompositeに設定して、日付とサイズの両方に適用することもできます。
Simon Tewsi

1
よく働く。要約にも追加します。staticLogFileName値がfalseに設定されていることを確認します
Randall Flagg

5

ファイル拡張子を保持するには:

<log4net>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingLogFileAppender"/>
    </root>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="D:\\LogFolder\\%date{yyyyMM}\\SchT.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maximumFileSize value="30MB" />
      <staticLogFileName value="true" />
      <preserveLogFileNameExtension value="true"/>
      <datePattern value="ddMMyyyy" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
  </log4net>

なぜそこにある%date{yyyyMM}value="ddMMyyyy" ?有効な日付パターンはどれですか?
アラン遺跡

datePatternはファイル名だと思いますが、%date {yyyyMM}は親ディレクトリ用です(そのようにしたかったのです)
Fourat

datePattern属性は、Date RollingStyleのローリング期間を設定します。RollingFileAppenderの下のlogging.apache.org/log4net/release/config-examples.htmlを参照してください 。「たとえば、「yyyyMMdd」の日付パターンは毎日ロールされます。使用可能なパターンのリストについては、System.Globalization.DateTimeFormatInfoを参照してください。」
Ryan Buddicom、2018年

@rbuddicomそうですが、問題はファイル拡張子を保持する方法についてです。
Fourat 2018年

アランは「value = "ddMMyyyy"」の目的に疑問を投げかけました。その点、「datePatternはファイル名用だと思います」というコメントは正しくありません。
Ryan Buddicom

0

以前の応答の拡張構成セクション

 ...
 ...
 <rollingStyle value="Composite" />
 ...
 ...

リストされた作品ですが、使用する必要はありませんでした

<staticLogFileName value="false" /> 

。アプリケーションが再起動/再利用されるとファイルが毎日再構築されるため、RollingAppenderはその設定を(論理的に)無視する必要があると思います。おそらく、アプリケーションが起動するたびに即座にロールオーバーすることが重要です。


私にとって、<staticLogFileName value = "false" />なしでは機能しません
nurettin

私も、staticLogFileNameをfalseに設定する必要がありました。そうしないとログに記録されません
oonyalo

0

システム変数を使用してCIから簡単に変更できるように、構成をコードに移動しました。このコードをファイル名に使用すると、結果は「Log_03-23-2020.log」になります。

            log4net.Repository.ILoggerRepository repository = LogManager.GetRepository(Assembly.GetEntryAssembly());
            Hierarchy hierarchy = (Hierarchy)repository;
            PatternLayout patternLayout = new PatternLayout();
            patternLayout.ConversionPattern = "%date %level - %message%newline%exception";
            patternLayout.ActivateOptions();

            RollingFileAppender roller = new RollingFileAppender();
            roller.AppendToFile = true;
            roller.File = "Log_";
            roller.DatePattern = "MM-dd-yyyy'.log'";
            roller.Layout = patternLayout;
            roller.MaxFileSize = 1024*1024*10;
            roller.MaxSizeRollBackups = 10;
            roller.StaticLogFileName = false;
            roller.RollingStyle = RollingFileAppender.RollingMode.Composite;
            roller.ActivateOptions();
            hierarchy.Root.AddAppender(roller);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.