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()