logback提供自定义属性接口:
PropertyDefiner:getPropertyValue()
记一笔:GetIpCustomProperty
public String getPropertyValue() {
try {
InetAddress address = InetAddress.getLocalHost();
return address.getHostAddress();
} catch (UnknownHostException e) {
e.printStackTrace();
}
return null;
}
GetPortCustomProperty==静态无请求获取服务端口号
public String getTomcatPortValue() {
try {
List<MBeanServer> serverList = MBeanServerFactory
.findMBeanServer(null);
for (MBeanServer server : serverList) {
Set<ObjectName> names = new HashSet<ObjectName>();
names.addAll(server.queryNames(new ObjectName(
"Catalina:type=Connector,*"), null));
Iterator<ObjectName> it = names.iterator();
while (it.hasNext()) {
ObjectName oname = (ObjectName) it.next();
String pvalue = (String) server.getAttribute(oname,
"protocol");
if (StringUtils.equals("HTTP/1.1", pvalue)) {
return ObjectUtils.toString(server.getAttribute(oname,
"port"));
}
}
}
} catch (Exception e) {
LOGGER.error("获取port失败,影响logback的文件拼接", e);
}
return StringUtils.EMPTY;
}
GetHomeCustomProperty
public String getPropertyValue() {
String jettyPath = System.getProperty("jetty.home");
String catalinaPath = System.getProperty( "catalina.home");
String path = StringUtils.defaultString(jettyPath, catalinaPath);
if(StringUtils.isBlank(path)) {
return defaultPath;
}
File file = new File(path);
if(file.exists()){
File parentFile = file.getParentFile();
return (parentFile != null? parentFile.getPath(): file.getPath()) +File.separator+ defaultPath;
}
return defaultPath;
}
然后在logback.xml配置文件中,定义自定义标签define name代表标签,class指向处理的类。在初始化时调用getPropertyValue()