在Spring中使用日志

原来一直使用spring mvc,spring框架是3.6.2.配置的是log4j的日志,使用slf4j的log4j结合的方式,最近开发一个新的项目,我搭建了spring boot1.3.6.RELEASE的框架,能使用集成log4j,但是确实有冲突的问题,一直报logback有冲突的信息:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/limm/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/limm/.m2/repository/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]

操作:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>                  <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion> 
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
<exclusion> 
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>

通过依赖树进行了各种排除,才能解决不使用slf4j,使用log4j输出日志,但是接下来进行了spring boot的升级,升级之后才发现springboot 2.x版本不支持log4j了,支持log4j2,既然log4j2是它本来支持的所以准备换成log4j2,配置文件是xml支持原来的log4j.properties,key value的properties文件了。

经过这一番折腾,才发现日志这个体系太繁杂了,所以想梳理一下日志相关的这个体系。

一、日志体系

1. 发展历史

见的Java日志框架有log4j、logback、j.u.l (java.util.logging),常用的日志门面,SLF4J、commons-logging,其中,j.u.l是Java原生库,但是在Java 1.4中才被引用; commons-logging出自Apache,用于桥接j.u.l和log4j;log4j、logback和SLF4J出自同一个作者。
出现的时间顺序:

log4j--->j.u.l----> commons-logging----->SLF4J---->logback

  1. log4j
    在JDK 1.3及以前,Java打日志System.err.println()或者e.printStackTrace(),或者这样根本不算是完善的日志,Debug日志被写到STDOUT流,错误日志被写到STDERR流,这样的日志无法定制,日志粒度小,哪里有压迫哪里就有反抗,哪里有问题,哪里就有有解决问题的办法,所以log4j应运而生
  2. j.u.l
    在log4j之后,可能是受到了log4j的启发,Sun在Java1.4版本中引入了java.util.logging,但是不如log4j完善,需要开发人员编写Appenders(Sun称之为Handlers)。
  3. commons-logging
    第三个出现的是commons-logging,是一个API bridge,可以兼容上面的两个框架,然而commons-logging对Log4j和j.u.l的配置问题兼容的并不好,使用commons-loggings还可能会遇到类加载问题,导致NoClassDefFoundError的错误出现,或许你也经常会遇到这个问题。
  4. SLF4J
    看到上面的这些问题,可能log4j的作者忍不住了(纯属我个人观点),他发起了SLF4j,只要使用SLF4J提供的接口,即可隐藏日志的具体实现,SLF4J提供的核心API是一些接口和一个LoggerFactory的工厂类,大大简便了开发人员的日志配置,方便使用。
  5. logback
    logback和log4j是同一个作者创作,可以认为logback比log4j有更多的优点。

2. Spring 依赖日志包

日志框架出现
先看一下spring boot 2.1.1.RELEASE版本依赖的日志:

从上图可以看出,Spring Boot通过jul-to-slf4j.jar去适配了我们上面提到的JUL日志框架,通过log4j-to-slf4j.jar去适配了log4j日志框架。
Spring5.x相对于Spring4.x去除了原来默认使用的JCL 框架,而是采用SLF4j这个通用的日志门面,所以Spring Boot2.x相对于Spring Boot1.x来说去除了对JCL的适配。

SpringBoot能自动适配所有的日志,其底层使用slf4j+logback的方式记录日志,引入其他框架的时候,只需要 把这个框架依赖的日志框架排除掉即可,因为Spring Boot会通过自己的jar去替代;

3. logback

logback

日志级别:

logbac日志级别从低到高分别为TRACE, DEBUG, INFO, WARN, ERROR

配置文件:
logback.xml也可以命名为

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot使用logback打印日志非常简单,只需要以下几个步骤: 1. 添加依赖 在pom.xml文件添加logback的依赖 ```xml <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> ``` 2. 配置logback.xml 在src/main/resources下新建logback.xml文件,配置logback日志输出格式和输出位置等信息。 例如,以下是一个简单的logback.xml配置文件: ```xml <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="com.example" level="DEBUG"/> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </configuration> ``` 其,`appender`定义了日志输出的方式,这里使用的是`ConsoleAppender`,即输出到控制台;`encoder`定义了日志的输出格式;`logger`定义了日志输出的级别,这里设置为DEBUG级别;`root`定义了日志输出的根级别,这里设置为INFO级别。 3. 在应用程序使用logback 在需要打印日志的类使用logback即可,例如: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyService { private static final Logger logger = LoggerFactory.getLogger(MyService.class); public void doSomething() { logger.debug("Debug log"); logger.info("Info log"); logger.warn("Warn log"); logger.error("Error log"); } } ``` 这里使用了`LoggerFactory.getLogger()`方法获取Logger对象,然后使用`debug()`、`info()`、`warn()`和`error()`等方法输出不同级别的日志信息。 以上就是在Spring Boot使用logback打印日志的基本步骤。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值