为了能将log4j的ConversionPattern无缝应用到logback上来,需要对两个Conversion做适配,具体可以参考:Log4j 与 Logback的ConversionPattern对比

ch.qos.logback.classic.PatternLayout

static代码块新增:

// adapter for log4j
defaultConverterMap.put("l", LocationConverter.class.getName());
defaultConverterMap.put("x", NDCConverter.class.getName());

其中:

public class LocationConverter extends ClassicConverter {

    @Override
    public String convert(ILoggingEvent le) {
        StringBuilder buf = new StringBuilder();

        StackTraceElement[] cda = le.getCallerData();
        if (cda != null && cda.length > 0) {

            buf.append(cda[0]);
            return buf.toString();
        } else {
            return CallerData.CALLER_DATA_NA;
        }
    }

}
public class NDCConverter extends ClassicConverter {

    @Override
    public String convert(ILoggingEvent event) {
        Map<String, String> mdcPropertyMap = event.getMDCPropertyMap();
        return outputMDCForAllKeys(mdcPropertyMap);
    }

    private String outputMDCForAllKeys(Map<String, String> mdcPropertyMap) {
        StringBuilder buf = new StringBuilder();

        Map<Integer, String> ndcMap = new HashMap<Integer, String>();

        for (Map.Entry<String, String> entry : mdcPropertyMap.entrySet()) {
            if (entry.getKey().startsWith("NDC") && entry.getKey().length() > 3) {
                String index = entry.getKey().substring(3);
                try {
                    int idx = Integer.parseInt(index);
                    ndcMap.put(idx, entry.getValue());
                } catch (Exception e) {
                    // ignore
                }
            }
        }

        boolean first = true;
        for (int i = 0; i < ndcMap.size(); i++) {
            if (first) {
                first = false;
            } else {
                buf.append(" ");
            }
            buf.append(ndcMap.get(i));
        }
        return buf.toString();
    }
}

NDCConverter只是兼容了输出,因为在logback里,NDC是通过MDC来实现的,其key为NDC + index(from 0),因此可以通过key来实现顺序输出,但是这个是基于用户的 MDC 不能以 "NDC"开头,再加上数字来命令,否则NDC的输出会出现MDC的内容;

Log4j的ConversionPattern无缝适配到Logback的更多相关文章

  1. 从log4j日志无缝迁移至logback

    ogback对比log4j的有点在此就不赘述了. 由于在项目的原有代码中,大量的日志生成是通过log4j实现的,新的代码希望通过logback的方式生成日志,同时希望将老的代码在不修改的情况下直接将日 ...

  2. Log4j的ConversionPattern参数的格式含义

    Log4j建议只使用四个级别,优先级从高到低分别是ERROR.WARN.INFO.DEBUG#这里定义能显示到的最低级别,若定义到INFO级别,则看不到DEBUG级别的信息了~!log4j.rootL ...

  3. log4j的ConversionPattern参数的格式含义-转

    转自:http://www.blogjava.net/wilesun/archive/2007/10/30/156999.html Log4j建议只使用四个级别,优先级从高到低分别是ERROR.WAR ...

  4. Log4j中conversionPattern的含义

    %a -- 表示礼拜几,英文缩写形式,比如“Fri”%A -- 表示礼拜几,比如“Friday”%b -- 表示几月份,英文缩写形式,比如“Oct”%B -- 表示几月份,“October”%c -- ...

  5. Log4j 与 Logback的ConversionPattern对比

    为了能将log4j的配置无缝转到logback,需要了解其中ConversionPattern的差异,以下是对比表格,内容来自: log4j官网 logback官网 其中可能需要转换的地方主要有两块: ...

  6. log4j+logback+slf4j+commons-logging的关系与调试

    背景     由于现在开源框架日益丰富,好多开源框架使用的日志组件不尽相同.存在着在一个项目中,不同的版本,不同的框架共存.导致日志输出异常混乱.虽然也不至于对系统造成致命伤害,但是明显可以看出,架构 ...

  7. Log4j,Log4j2,logback,slf4j日志学习

    日志学习笔记 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条 ...

  8. Log4j,Log4j2,logback,slf4j日志学习(转)

    日志学习笔记Log4jLog4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.数据库等:我们也可以控制每一条日志的输出格式:通过定义每一条日志 ...

  9. java日志组件介绍(common-logging,log4j,slf4j,logback )

    转自:http://www.blogjava.net/daiyongzhi/archive/2014/04/13/412364.html common-logging是apache提供的一个通用的日志 ...

随机推荐

  1. error-2016-2-15

    错误:该请求包含双重转义序列,而 Web 服务器上配置的请求筛选拒绝双重转义序列原因:一些URL中可能会包含+号等符号,然后IIS7以上的版本会默认拒绝请求此URL,需要进行如下的修改. 解决PHP中 ...

  2. 新版react踩坑总结

    使用es6语法与原本es5语法几个有区别的地方 1.React.creatClass与React.Component var Component = React.createClass({ rende ...

  3. tp框架实现防止非法登录

    <?phpnamespace Admin\Controller;use Think\Controller;class UserController extends Controller {//登 ...

  4. The user specified as a definer ('root'@'%') does not exist

    The user specified as a definer ('root'@'%') does not exist 此种报错主要是针对访问视图文件引起的(没有权限) 解决方法: 2.进入mysql ...

  5. WebLogic 中的基本概念

    完全引用自: WebLogic 中的基本概念 WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来, ...

  6. 网络TCp数据的传输设计(黏包处理)

    //1.该片为引用别人的文章:http://www.cnblogs.com/alon/archive/2009/04/16/1437599.html 解决TCP网络传输"粘包"问题 ...

  7. Memento(备忘录)-对象行为型模式

    1.意图 在布破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可以将对象恢复到原先保存的状态. 2.别名 Token 3.动机 为了允许用户取消不确定的操作或从错误中 ...

  8. Git学习(四)——分支管理

    一.创建与合并分支 1.创建分支 一开始的时候,master分支是一条线,Git用master指向最新的提交,再用HEAD指向master,就能确定当前分支,以及当前分支的提交点.每次提交 ,mast ...

  9. java环境配置步骤

        1. jdk下载 官网:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  10. docker--buildbot安装

    curl -L https://github.com/docker/compose/releases/download/1.8.0/docker-compose-`uname -s`-`uname - ...