一、简介

slf4j主要是为了给Java日志访问提供一个标准、规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他日志框架,例如log4j和logback等。当然slf4j自己也提供了功能较为简单的实现,但是一般很少用到。对于一般的Java项目而言,日志框架会选择slf4j-api作为门面,配上具体的实现框架(log4j、logback等),中间使用桥接器完成桥接。本文侧重分析slf4j,也会解释门面+桥接器+实现的原理。

二、使用

1.手动添加三个jar包:slf4j-api-1.8.0-alpha2.jar、log4j-1.2.17.jar、slf4j-log4j12-1.8.0-alpha2.jar

2.配置log4j.properties配置文件,放在classpath下,log4j会自动加载,也可以改变目录后再代码中加载,具体内容如下:

# rootLogger参数分别为:根Logger级别,输出器stdout,输出器log
log4j.rootLogger = info,stdout,log # 输出信息到控制台
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d [%-5p] %l %rms: %m%n # 输出DEBUG级别以上的日志到D://logs/debug.log
log4j.appender.log = org.apache.log4j.DailyRollingFileAppender
log4j.appender.log.DatePattern = '.'yyyy-MM-dd
log4j.appender.log.File = D://debug.log
log4j.appender.log.Encoding = UTF-8
#log4j.appender.log.Threshold = INFO
log4j.appender.log.layout = org.apache.log4j.PatternLayout
log4j.appender.log.layout.ConversionPattern = %d [%-5p] (%c.%t): %m%n

3.测试代码如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LoggerTest {
private static final Logger logger = LoggerFactory.getLogger(LoggerTest.class); public static void main(String[] args) {
logger.info("Current Time: {}", System.currentTimeMillis());
logger.info("Current Time: " + System.currentTimeMillis());
logger.info("Current Time: {}", System.currentTimeMillis());
logger.trace("trace log");
logger.warn("warn log");
logger.debug("debug log");
logger.info("info log");
logger.error("error log");
}
}

 4.更换日志系统

看到这里,你可能会有疑问:既然都用了log4j,为什么还要用SLF4J来写记录日志的代码呢,不是多此一举吗?

答案是否定的。因为slf4j是一个门面,log4j是里子,一个slf4j可以搭配不同的里子以实现不同的效果。假设我们不再需要log4j,而是希望改为使用java自带logging记录日志,我们需要做的仅仅是将pom.xml的依赖项slf4j-log4j12改为slf4j-jdk14即可,无需对上述测试代码做任何修改。

最新文章

  1. HDU 4920 居然会超时
  2. java关键字:synchronized
  3. HighchartsJS创建点状带标识的图表实例
  4. C/S B/S 及WEB工作原理
  5. HADOOP :: java.lang.ClassNotFoundException: WordCount
  6. poj 2752 Seek the Name, Seek the Fame【KMP算法分析记录】【求前后缀相同的子串的长度】
  7. SQL某个字段在原内容上增加固定内容或replace查找替换内容
  8. Serilog with Autofac
  9. 【具体数学--读书笔记】1.1 The Power of Hanoi
  10. MYSQLI - mysqli操作数据库
  11. mock server 前后端分离小结(转)
  12. varchar2长度的意义
  13. 设置实体类型中String类型的属性值为String.Empty
  14. 利用java8对设计模式的重构
  15. Android 利用二次贝塞尔曲线模仿购物车加入物品抛物线动画
  16. 4.无监督学习--K-means聚类
  17. 可以替代alert 的漂亮的Js弹框
  18. sqlserver C# 数据类型对照表(转载)
  19. Ubuntu14.04 ,libboost_filesystem.so.1.54.0: cannot open shared object file: No such file or directory
  20. NB 命令安装需似机(无图型化安装)

热门文章

  1. dotnet 在build restore publish 的时候不显示警告
  2. es6数组
  3. 计算机爱好者协会技术贴markdown第四期
  4. Injection
  5. 移动端H5页面禁止长按复制和去掉点击时高亮
  6. UTF-8的BOM含义
  7. 浅谈Spring中的IOC容器
  8. ABAP接口之Http发送json报文
  9. Exp7 网络欺诈防范
  10. python列表和字符串的三种逆序遍历方式