从 log4net 过渡到 log4j 2

Transitioning from log4net to log4j 2

我正在 java 中的一个项目中工作,该项目使用 log4j2 并希望设置日志记录,就像我在 .NET 中使用 log4net 的旧项目中所做的一样。

有些事情我想不通,如何在 log4j2 中做。

如何强制 log4j2 appender 将当前日期写入日志文件并每天创建新的日志文件?我尝试使用 TimeBasedTriggeringPolicy,它允许我将日期放在旧日志的名称中,但当前日志从来没有日期。我尝试在 fileName 中使用 %d{yyyyMMdd} 但它没有用。 log4j2 中是否有一些等效于 datePattern 的东西?

这是 .NET 项目的原始附加程序。

<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <file value="c:\ConcertCTS\Logs\" />
    <appendToFile value="true" />
    <datePattern value="yyyyMMdd'_debug.log'" />
    <staticLogFileName value="false" />
    <encoding value="utf-8" />
    <maximumFileSize value="50MB" />
    <rollingStyle value="Composite" />
    <maxSizeRollBackups value="-1" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date{hh:mm:ss.fffzzz} [Thread: %-2thread] %-5level - %message%newline%exception" />
    </layout>
</appender>

这是我为 log4j2 想出的。

    <RollingFile name="DebugRollingAppender" fileName="/EnvoyLogs/debug.log"
        filePattern="/EnvoyLogs/%d{yyyyMMdd}_debug.%i.log">
        <PatternLayout>
            <Pattern>%d [%t] %p %c{8.} %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="50 MB" />
        </Policies>
        <DefaultRolloverStrategy max="100"
            compressionLevel="0" />
    </RollingFile>

我也不喜欢它在我的旧日志上排名第一我知道它是 filePattern 中的 %i 这是做什么的但我不想把它收起来因为我需要在日志超过时拆分和编号一定的尺寸。我可以用它做些什么吗?

提前致谢!

Log4j2 目前 (v 2.1) 无法执行您描述的操作。我建议在 log4j2 Jira 问题跟踪器上提出功能请求。我喜欢从一开始就在文件名中包含日期的想法,非常有道理。