logback自定义目录及输出格式

由于日志管理需要整合到统一的日志管理平台,所以集群部署的多台服务器日志会冲突,老板要求在日志路径及日志文件中加上服务器IP加以区分,此为前要。


首先说一下为什么不用MDC赋值来操作:MDC赋值其实也可以达到区分路劲和在文件中加Ip的目的,但是代码倾入大,需要动底层框架上已经封装好的业务jar包,因此首先pass。
百度后有大神说整一个logback自定义格式转换器,也就是继承ClassicConverter,实现他的convert方法,然后配置在xml中配置conversionRule标签,即可获取自定义的值,亲测后发现该方式只能在文件中(Pattern)获取到自定义的值,而路径中(FileNamePattern)无法获取到值,创建的路径为***/%PARSER_ERROR[***]/***,因此该方式不能满足需求。但是该方式文件中使用还是方便的,因此附上我自己的实现;

// 新建java类
package *****.****.util.logback;

import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * 该工具类用于在logback中通过%IP获取节点IP地址(日志文件内容),该类需要配置在logback中conversionRule标签
 */
public class NodeIpConverter extends ClassicConverter {
    private static String nodeIP;
    static {
        try {
            nodeIP = InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
    @Override
    public String convert(ILoggingEvent event) {
        return nodeIP;
    }
}

// logback.xml添加以下配置,该配置位于configuration标签下
<conversionRule conversionWord="nodeIp" converterClass="***.***.util.logback.NodeIpConverter"/>
该方式引用时为 %nodeIp

一路不同再找一路,再次寻求度娘,发现通过自定义全局属性可以实现在路径中动态获取IP值,柳暗花明啊,而且经过测试发现该方式不仅可以在路径(FileNamePattern)中动态获取服务器IP,同时日志输出文件中(Pattern)也可以使用,下面奉上代码:

// 新建java类继承PropertyDefinerBase,重写getPropertyValue方法
package ***.***.util.logback;

import java.net.InetAddress;
import java.net.UnknownHostException;
import ch.qos.logback.core.PropertyDefinerBase;

/**
 * 该工具类用于在logback中通过%IP获取节点IP地址(日志文件路劲),该类需要配置在logback中conversionRule标签
 */
public class NodeIpProperty extends PropertyDefinerBase {
    private static String nodeIP;
    static {
        try {
            nodeIP = InetAddress.getLocalHost().getHostAddress();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }

    @Override
    public String getPropertyValue() {
        return NodeIpProperty.nodeIP;
    }
}

//logback.xml中添加如下配置,该配置位于configuration标签下
<define name="NODE_IP" class="***.***.util.logback.NodeIpProperty"/>

该方式引用时为 ${NODE_IP}

以上,不是什么新东西,只是在实际工作中遇到的坑,希望能帮到遇到同样问题的伙伴

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值