log4j.properties FileAppender文件名模式

时间:2015-06-28 18:35:55

标签: log4j configuration-files

我一直在使用slf4j / logback一段时间,我们在logback.xml中的自定义文件名是:

var myData = [
    {
      value: 300,
      color:"#F7464A",
      highlight: "#FF5A5E",
      label: "Red"
    }
]

现在我切换到slf4j / log4j。如何在log4j.properties中使用类似的日志文件名模式?

<timestamp key="ymd" datePattern="yyyyMMdd" />
<timestamp key="hms" datePattern="HHmmss" />
... ...
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>/var/log/${ymd}/${HOSTNAME}-${USER}-${hms}.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>/var/log/${ymd}/${HOSTNAME}-${USER}-${hms}.%i.log</fileNamePattern>

1 个答案:

答案 0 :(得分:1)

使用Log4J 2,等效配置(log4j2.properties)将为:

name = MyApp

property.ymd=$${date:yyyyMMdd}
property.hms=$${date:HHmmss}

appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName =/var/log/${ymd}/${env:HOSTNAME}-${env:USER}-${hms}.log
appender.rolling.filePattern =/var/log/${ymd}/${env:HOSTNAME}-${env:USER}-${hms}.%i.log

appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d %p %C{1.} [%t] %m%n

appender.rolling.policies.type = Policies
appender.rolling.policies.size.type=SizeBasedTriggeringPolicy
appender.rolling.policies.size.size=1KB

rootLogger.level=debug
rootLogger.appenderRef.rolling.ref=RollingFile

您没有为logback指定触发策略,因此我使用了一个简单的SizeBasedTriggerPolicy用于演示目的。

使用 Log4J 1 是不可能(至少据我所知)通过纯配置方式实现相同的功能,因此您将不得不求助于编程配置,例如:

//Parameters
String user = System.getenv("USER2");
String host = System.getenv("HOSTNAME");

Date now = new Date();
String day = new SimpleDateFormat("yyyyMMdd").format(now);
String time = new SimpleDateFormat("HHmmss").format(now);

//Filename pattern
String pattern = String.format("/var/log/%s/%s-%s-%s",day,host,user,time);

//Create a new RollingFileAppender instance
RollingFileAppender appender = new RollingFileAppender();
appender.setName("ROLLING");
appender.setFile(pattern+".log");

FixedWindowRollingPolicy policy = new FixedWindowRollingPolicy();
    policy.setFileNamePattern(pattern+".%i.log");
    policy.setMinIndex(1);
    policy.setMaxIndex(5);
    policy.activateOptions();
appender.setRollingPolicy(policy);

appender.setTriggeringPolicy(
    new SizeBasedTriggeringPolicy(1000)
);

appender.setLayout(
    new PatternLayout("%d %m%n")
);

appender.activateOptions();

//Attach it to the ROOT logger
Logger.getRootLogger().addAppender(
    appender
);

请注意,Log4J 1已于2015年正式达到“生命终结”:

  

2015年8月5日,测井服务项目管理委员会宣布Log4j 1.x已达到使用寿命。有关公告的完整文本,请参阅Apache博客。建议用户使用Log4j 1升级到Apache Log4j 2

因此强烈建议升级到2.X,除非由于某种原因它不是一个选项。