2016-09-27 16 views
0

私は、特定のロギングスキーマを持っています。複数のプログラムをログに記録する必要があるため、ファイル名ではなく日付でソートされます。そのため、たとえば、「戦士」と呼ばれるコンピュータ上で2016年9月27日に私たちのスクリプト起動プログラムによって生成されたログファイルは以下のようなものを配置されることになる。log4j古いログファイルをアーカイブしないで毎日新しいログファイルを自動作成する方法

<root folder>/logs/warrior/2016/09 - Sep/27 - Launcher.log 

それは、特定のための正しいログファイルを見つけることになりコンピュータは非常に整理されていますが、非常に迅速です。このロギングスキーマの一部を変更する必要がある場合、私はそうするためのちょっとした揺れの余地があります。可能であれば、私はそれをそのまま保つつもりです。

私が遭遇している問題は、一部のユーザーがプログラムを夜間実行していることです。翌日には、前回のログファイルにすべてのログアクティビティが表示されます。 log4j(現在のバージョン2.6)に、新しい日が発生したことを自動的に検出し、ロギングファイルを28 - Launcher.logに変更して、上記と同じスキーマを維持する方法はありますか?また、来月のヒット時などに10 - Oct/フォルダを自動作成するには?

ログファイルは毎日ロールオーバーされるため、log4jをアーカイブする必要はありません。したがって、私は本当にトリガーポリシーを必要としません(サイズベースのものを除いて、 RollingFileAppenderで本当に巨大になります)。ここでは、私はlog4j2.xmlファイルで、これまで持っているものです。

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN" monitorInterval="30"> 
    <Properties> 
    <Property name="filename">logs/artdept.log</Property> 
    <Property name="baseDir">/Volumes/ArtDept/ArtDept/Scripts/sky-artdept/logs</Property> 
    </Properties> 
    <Appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    <File name="MyFile" fileName="${filename}"> 
     <PatternLayout> 
     <pattern>%d %p %C{1.} [%t] %m%n</pattern> 
     </PatternLayout> 
    </File> 
    <RollingFile name="RollFile" fileName="${baseDir}/${env:USER}/${date:yyyy}/${date:MM} - ${date:MMM}/${date:dd} - Launcher.log" 
      filePattern="${baseDir}/Archives/${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> 
     <PatternLayout> 
     <Pattern>%d %p %C{1.} [%t] %m%n</Pattern> 
     </PatternLayout> 
     <Policies> 
     <SizeBasedTriggeringPolicy size="250 MB" /> 
     </Policies> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Root level="trace"> 
     <AppenderRef ref="RollFile"/> 
    </Root> 
    </Loggers> 
</Configuration> 

私はそれが真夜中でファイルを変更するために取得するには、単純な何かが欠けていると確信しているが、私はそれが何であるかを把握することはできません。

+0

このリンクを使用すると、役立つかもしれません.http://stackoverflow.com/questions/20618527/create-new-log-file-daily-using-log4j – mhasan

+0

ありがとうございます@ mhasan、しかし、私はそこに情報を恐れています現在古くなっています。 'DailyRollingFileAppender'はlog4j(現在は2.6)の最新バージョンには存在しません。また、それがあったとしても、ファイル名に日付を付加するだけであるように見えます。私はログファイルへのパスを通して日付の様々な部分を配置する能力が必要です。例えば、 '2016/09 - Sep/27 - Launcher.log' – Sturm

+0

さて、私はこのための回避策を発見したかもしれません。私はうまくいけばそれをすぐに投稿しますが、それはlog4jの2.7リリースに依存しています。私は[バグ](https://issues.apache.org/jira/browse/LOG4J2-1548?jql=project%20%3D%20LOG4J2%20AND%20text%20~%20cron)に遭遇したメインログファイルが更新されたときに1秒ごとにトリガするアーカイブ。この問題が解決されたら、更新されたlog4j2.xmlファイルを投稿して、どのように私がこれをどのように計画しているか誰もが分かるようにします。 – Sturm

答えて

0

属性を"0 0 0 * * ?"に設定して、CronTriggeringPolicyを使用する必要があることがわかりました。これはlog4jのドキュメントのいくつかの例で示されていますが、バージョン2.6.2では壊れています。そのポリシーは、真夜中に1日に1回ログファイルがロールオーバーされるように設定されていますが、最初のトリガー後に1秒に1回、実際にはロールオーバーされます。

バージョン2.7が今日(10/06/2016)リリースされたばかりでなく、他の多くのものの中でも、この問題が修正されました。だから、今、CronTriggeringPolicyは期待どおりに動作します!今では新しい問題がその醜い頭を育てましたが、明日はもう少しテストをするときに別スレッドに投稿します。私は、これは他の人を助け願ってい

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN" monitorInterval="30"> 
    <Properties> 
    <Property name="filename">logs/artdept.log</Property> 
    <Property name="baseDir">/Volumes/ArtDept/ArtDept/Scripts/sky-artdept/logs</Property> 
    </Properties> 
    <Appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 
    <File name="MyFile" fileName="${filename}"> 
     <PatternLayout> 
     <pattern>%d %p %C{1.} [%t] %m%n</pattern> 
     </PatternLayout> 
    </File> 
    <RollingFile name="DailyRoll" fileName="${baseDir}/${env:USER}/${date:yyyy}/${date:MM} - ${date:MMM}/Launcher.log" 
      filePattern="${baseDir}/${env:USER}/${date:yyyy}/${date:MM} - ${date:MMM}/%d{dd} - Launcher-%i.log"> 
     <PatternLayout> 
     <Pattern>%d %p %C{1.} [%t] %m%n</Pattern> 
     </PatternLayout> 
     <Policies> 
     <CronTriggeringPolicy schedule="0 0 0 * * ?" /> 
     <SizeBasedTriggeringPolicy size="250 MB" /> 
     </Policies> 
    </RollingFile> 
    </Appenders> 
    <Loggers> 
    <Root level="trace"> 
     <AppenderRef ref="DailyRoll"/> 
    </Root> 
    </Loggers> 
</Configuration> 

そして、ここでは、私が使用しているlog4j2.xml設定ファイルです!

関連する問題