最近线上有个需求,将每个服务的多个实例打出的日志在日志名称和内容里增加ip信息,首先当然是先百度(Google)一下,看看实现方式。
创建一个类继承自ch.qos.logback.classic.pattern.ClassicConverter重写convert()方法,在该方法内返回ip信息 public class LogUtil extends ClassicConverter { @Override public String convert(ILoggingEvent event) { String ip = null; try { ip= InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { logger.error("获取ip异常", e.toString()); } return ip; } }3.配置logback.xml
<conversionRule conversionWord="ip" converterClass="xxx.xxx.xxx.LogUtil" />4.在需要显示ip的地方加上:%ip
但是在运行过程中发现在日志文件创建过程中,该配置还没有生效,文件名显示undefined。 所以如果需要在日志文件名中也显示ip等自定义信息,可以实现PropertyDefiner接口或者继承PropertyDefinerBase类,然后重写getPropertyValue()方法即可。
官网介绍:http://logback.qos.ch/manual/configuration.html
public class LogUtil extends PropertyDefinerBase{ @Override public String getPropertyValue() { String ip = null; try { ip= InetAddress.getLocalHost().getHostAddress(); } catch (UnknownHostException e) { logger.error("获取ip异常", e.toString()); } return ip; } }然后在logback.xml中的<configuration>中配置即可。
<define name="ip" class=""xxx.xxx.xxx.LogUtil"/>