通过自定义监听器,往logback中传参
我们的项目是部署在was集群中,需求是生成的日志文件中必须带有server名。
logback.xml中增加:
<contextListener class="com.xxx.xxx.LoggerStartupListener"/>
LoggerStartupListener
public class LoggerStartupListener extends ContextAwareBase
implements LoggerContextListener, LifeCycle {
private boolean started = false;
@Override
public void start() {
if (started) {
return;
}
Context context = getContext();
context.putProperty("server.name", getServerName());
started = true;
}
private String getServerName(){
String str=System.getProperty("sun.java.command");
String serverName=null;
if(str!=null){
String[] s=str.split("\\s+");
serverName=s[s.length-1];
}else{
serverName="Log"+String.valueOf(Math.random()*100);
}
return serverName;
}
@Override
public void stop() {
}
@Override
public boolean isStarted() {
return started;
}
@Override
public boolean isResetResistant() {
return true;
}
@Override
public void onStart( LoggerContext context ) {
}
@Override
public void onReset( LoggerContext context ) {
}
@Override
public void onStop( LoggerContext context ) {
}
@Override
public void onLevelChange( Logger logger, Level level ) {
}
}
logback日志显示时间差8小时
改之前配置如下:
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss,SSS}[%t][%c][%p]-%msg%n</pattern>
</encoder>
错在HH:mm:ss.SSS和HH:mm:ss,SSS
在使用逗号时,会默认使用时区设置。
改之后
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%t][%c][%p]-%msg%n</pattern>
</encoder>