web-dev-qa-db-ja.com

日付のタイムスタンプをlog4j2ログファイルに追加するにはどうすればよいですか?

log4j2を使用して日依存のログファイルを作成したい:

<RollingFile name="APP" fileName="application-%d{yyyy-MM-dd}.log" />

結果のログファイル名:application-%d{yyyy-MM-dd}.log、タイムスタンプは置き換えられません。どうして?

11
membersound

パターンは属性「fileName」で指定するべきではなく、以下のように属性「filePattern」でパターンを指定する必要があります。

<RollingFile name="RollingFile" fileName="${log-path}/filename.log" 
filePattern="${log-path}/filename-%d{yyyy-MM-dd}-%i.log" >
...
...
</RollingFile>

「%i」は、ロールオーバー時に自動的にインクリメントされるカウンターです。

これがお役に立てば幸いです。

8

ファイル名に日付を追加するには、%dを以下の形式に置き換えます。同じ問題が発生していましたが、そうすることで解決しました。

<RollingFile name="APP" fileName="application-${date:yyyy-MM-dd}.log" />
27
Bishal Gupta

これを試して:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">

    <Properties>
        <Property name="log-path">D:/logs/</Property>
    </Properties>

    <Appenders>

        <RollingFile name="DebuggerLogger" fileName="${log-path}CMSAutomation.${date:yyyy-MM-dd_hh-mm-ss}.log" filePattern="${log-path}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="10 MB" />
            </Policies>
        </RollingFile>

    </Appenders>

    <Loggers>
        <Root level="ALL">
            <AppenderRef ref="DebuggerLogger"/>
        </Root>
    </Loggers>

</Configuration>

アペンダーでASizeBasedTriggeringPolicyクラスを使用します。現在の秒をログファイル名に追加することもできます。 %d{yyyy_MM_dd HH.mm.ss}

import org.Apache.logging.log4j.core.LogEvent;
import org.Apache.logging.log4j.core.appender.rolling.*;
import org.Apache.logging.log4j.core.config.plugins.Plugin;
import org.Apache.logging.log4j.core.config.plugins.PluginAttribute;
import org.Apache.logging.log4j.core.config.plugins.PluginFactory;

@Plugin(name = "ASizeBasedTriggeringPolicy",
        category = "Core",
        printObject = true
)
public class ASizeBasedTriggeringPolicy extends AbstractTriggeringPolicy {
    private SizeBasedTriggeringPolicy sizeBasedTriggeringPolicy;
    private RollingFileManager aManager;

    protected ASizeBasedTriggeringPolicy(String maxFileSize) {
        sizeBasedTriggeringPolicy = SizeBasedTriggeringPolicy.createPolicy(maxFileSize);

    }

    public void initialize(RollingFileManager aManager) {
        sizeBasedTriggeringPolicy.initialize(aManager);
        this.aManager = aManager;
    }

    public boolean isTriggeringEvent(LogEvent event) {
        if (sizeBasedTriggeringPolicy.isTriggeringEvent(event)) {
            aManager.getPatternProcessor().setPrevFileTime(System.currentTimeMillis());
            return true;
        } else {
            return false;
        }
    }

    @PluginFactory
    public static ASizeBasedTriggeringPolicy createPolicy(@PluginAttribute("size") String size) {
        return new ASizeBasedTriggeringPolicy(size);
    }
}

次に、ログアペンダーでASizeBasedTriggeringPolicyを使用します

<RollingFile name="complete-log" fileName="${log-path}/complete-${date:yyyy_MM_dd HH.mm.ss} .log" 
                 filePattern="${log-path}/app-complete-%d{yyyy_MM_dd HH.mm.ss} - %i.log" >
    ...
    ... 
    <Policies>
         <ASizeBasedTriggeringPolicy size="200 kB"  />
    </Policies>
</RollingFile>
0
Ali