欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SLF4J

程序员文章站 2022-07-03 15:14:36
...


Simple logging Facade for Java

注意:

  • Logger 必须作为类的静态变量使用
    • 原因如下:
      • 使用 static 修饰的属性是归这个类使用的
      • 不论这个类实例化多少个,大家使用的都是同一个 static 属性
      • log4j 记录的是当前类的日志,并不是每个实例的日志
      • 所以只要有一个记录就好了

SLF4J 优势

  • 不是一个真正的日志实现,而是一个抽象层
  • 允许在后台使用任意一个日志类库
  • 使你的代码独立于任意一个特定的日志 API
  • 占位符 “{}”,在运行时会被某个提供的实际字符串所替换。
    • 不仅降低了你代码中字符串连接次数,而且还节省了新建的String对象。通过使用SLF4J,你可以在运行时延迟字符串的建立,这意味着只有需要的String对象才被建立
package cn.xm.exam.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Slf4jTest {
    private static Logger logger = LoggerFactory.getLogger(Slf4jTest.class);// slf4j日志记录器

    public static void main(String[] args) {

        // 普通的日志记录
        logger.debug("普通的日志记录");

        // {}占位符记录日志
        for (int i = 0; i < 3; i++) {
            logger.debug("这是第{}条记录", i);
        }

        // 用\转义{}
        logger.debug("Set \\{} differs from {}", "3"); // output:Set {} differs
                                                        // from 3

        // 两个参数
        logger.debug("两个占位符,可以传两个参数{}----{}", 1, 2);

        // 多个参数(可变参数)
        logger.debug("debug:多个占位符,{},{},{},{}", 1, 2, 3, 4);

        // 多个参数(可变参数)
        logger.info("info:多个占位符,{},{},{},{}", 1, 2, 3, 4);

        // 多个参数(可变参数)
        logger.error("error:多个占位符,{},{},{},{}", 1, 2, 3, 4);

    }

}

注意问题

  • 一般是将捕捉到的 Exception 对象作为日志记录的最后一个参数(会显示具体的出错信息以及出错位置),而且要放在 “{}” 可以格式化的参数之外,防止被 “{}” 转为 e.toString()
  • {}的作用是调用对应参数的 toString() 方法格式化日志,如果 exception 放在对应参数的位置上也会被格式化。所以,e 要放在{}参数之外,而且只能放在最后一个。如果放在中间也不会被打印错误信息:
  • 尽量不使用 e.getMessage(), 因为有的异常不一定有 message, 可以使用 e.toString 只会显示信息,不会显示出错的位置信息(不建议这种)
log4j.rootLogger=info,B

log4j.appender.A=org.apache.log4j.ConsoleAppender
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

log4j.appender.B=org.apache.log4j.RollingFileAppender
log4j.appender.B.File=E:\\test.log
log4j.appender.B.MaxFileSize=10MB
log4j.appender.B.MaxBackupIndex=5
log4j.appender.B.layout=org.apache.log4j.PatternLayout
log4j.appender.B.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n
相关标签: SLF4J