代码之家  ›  专栏  ›  技术社区  ›  Stijn Van Bael

包装slf4j API

  •  7
  • Stijn Van Bael  · 技术社区  · 15 年前

    就像做梦一样。我很高兴,直到我注意到每个日志事件都记录了Logback的位置:

    Logger.java:...
    

    哎呀!当我的开发人员试图找出日志事件的来源时,这对他们没有多大帮助。

    如何让Logback在堆栈中查找几层,以查找要记录的实际位置?

    public static void debug(String clazz, String message) {
        org.slf4j.Logger logger = LoggerFactory.getLogger(clazz);
        logger.debug(message);
    }
    
    2 回复  |  直到 15 年前
        1
  •  12
  •   Stijn Van Bael    15 年前

    从源头上找到了解决办法 jcl-over-slf4j . slf4j的大多数实现(包括logback)都使用 LocationAwareLogger ,它的日志方法要求包装记录器类的完全限定类名作为其参数之一:

    private static final String FQCN = Logger.class.getName();
    
    
    public static void debug(String clazz, String message) {
        org.slf4j.Logger logger = LoggerFactory.getLogger(clazz);
        if (logger instanceof LocationAwareLogger) {
            ((LocationAwareLogger) logger).log(null, FQCN, LocationAwareLogger.DEBUG_INT, message, null, null);
        } else {
            logger.debug(message);
        }
    }
    
        2
  •  5
  •   Thorbjørn Ravn Andersen    15 年前

    请参阅各种XXX-over-slf4j实现以了解如何做到这一点。

    基本上你想 代替 您当前的日志程序框架。不包slf4j。

    另一种方法是编写自己的布局子类,将您现在使用的布局子类化,该布局具有修改后的%m、%l etc字段的含义,该字段跳过了额外的堆栈帧。