我一直在使用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>
答案 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,除非由于某种原因它不是一个选项。