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
上一篇: Dubbo简介
下一篇: WKWebView使用经验汇总