slf4j :
slf4的全称是Simple Logging Facade for Java ,即简单日志门面。实现了日志框架一些通用的api,结合日志框架一起使用,最终日志的格式、记录级别、输出方式等都是通过绑定具体的日志框架实现的。
log4j:
log4j是apache实现的一个开源的日志框架。
logback:
logback也是由log4j的作者设计的,拥有更好的特性,用来取代log4j的一个日志框架。是slf4j的原生实现。(性能好于log4j)。
log4j和logback都可以单独使用,也可以绑定slf4j一起使用。(推荐绑定slf4)
使用slf4j绑定日志框架的优势
例如,在项目中使用了SLF4J记录日志,并且绑定了log4j,则日志会以log4j的风格输出;后期需要改为以logback的风格输出日志,只需要将log4j替换成logback即可,不用修改项目中的代码。(这也是为什么推荐slf4j结合日志框架一起使用的原因)。
log4j和logback
logback相对log4j有了相对多的改进,单两者的用法几乎差别不大。下面是logback 的优势:
以上,从性能的角度,可以尽快从log4j迁移到logback上来。
slf4j绑定log4j的用法
这里我们使用IDEA 和Maven。
1. 在pom.xml文件中添加相关依赖。
org.slf4j
slf4j-log4j12
1.7.21
此时会自动添加三个jar包
2.配置文件
log4j的正常运行需要配置文件,配置文件的类型:log4j.xml ,也可以是log4j.properties 。需要为其配置 root 、appender、layout等信息。
log4j.properties 配置文件
### set log levels ###
log4j.rootLogger = debug , stdout , D , E
### 输出到控制台 ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
### 输出到日志文件 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = C:/logs/properties_log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
### 保存异常信息到单独文件 ###
#log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
#log4j.appender.D.File = logs/error.log ## 异常日志文件名
#log4j.appender.D.Append = true
#log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
#log4j.appender.D.layout = org.apache.log4j.PatternLayout
#log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.xml配置文件
这两个配置文件任选其一,将配置文件放在resource的根目录下。
3.编写java类,并记录日志。
package com.shun.web;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController{
Logger logger = LoggerFactory.getLogger(HelloController.class);
@RequestMapping("/index")
public String hello(){
try{
int b = 1/0;
}catch (Exception e){
logger.error("=======",e);
}
//级别为debug的日志
logger.debug("Hello! debug!");
//级别为info的日志
logger.info("Hello! info!");
//级别为warn的日志
logger.warn("Hello! warn!");
//级别为error的日志
logger.error("Hello! error!");
System.out.println("111");
return "index";
}
}
slf4j绑定logback的用法
1. pom.xml添加依赖
ch.qos.logback
logback-classic
1.1.7
网上教程添加了很多,其实只要添加这一个,其他的依赖jar都会被下载下来。
2. 配置文件
logback.xlm
true
logback: %d {HH:mm:ss.SSS} %logger{36} - %M - %msg%n
/logs/logback_log.log
%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n
true
false
3.3.编写java类,并记录日志。(代码与log4j的调用代码相同)
package com.shun.web;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController{
Logger logger = LoggerFactory.getLogger(HelloController.class);
@RequestMapping("/index")
public String hello(){
try{
int b = 1/0;
}catch (Exception e){
logger.error("=======",e);
}
//级别为debug的日志
logger.debug("Hello! debug!");
//级别为info的日志
logger.info("Hello! info!");
//级别为warn的日志
logger.warn("Hello! warn!");
//级别为error的日志
logger.error("Hello! error!");
System.out.println("111");
return "index";
}
}
参考资料
https://www.cnblogs.com/Sinte-Beuve/p/5758971.html