解决slf4j 和 logback-classic遇到的坑

 更新时间:2021年07月30日 09:58:00   作者:东方柏  
这篇文章主要介绍了解决slf4j 和 logback-classic遇到的坑,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

slf4j 和 logback-classic遇到的坑

以前一直不注意日志的打印,最近项目需求需要用日志记录用时性能,集成日志时遇到的问题记录下。

问题一:服务器启动时提示未找到slf4j的实现类

此时一定是没有在classpath中找到jar包,启动时会有相应的警告提示。需要三个包:slf4j-api(接口),logback-classic(最优实现),logback-core(核心)。加入的位置可能存在两种,一种是tomcat需要,需要加在tomcat的lib下,还有一种是加在项目的classpath下。

问题二:不生成文件或者生成的文件路径不对

不生成文件存在一个原因,logback.xml没有配置写入到文件(默认配置文件的顺序是logback-test.xml, logback.groovy, logback.xml),注意如果是maven项目,不要把src/test/resources中的logback-test.xml发到环境中,因为优先级最高。关于生成的文件路不对,解释是正确的配置

<property name="LOG_HOME" value="servers/AdminServer/logs"/>

文件位置是eclipse的根目录,如果配置是

<property name="LOG_HOME" value="/servers/AdminServer/logs"/>

则文件位置是eclipse所在盘符的根目录,如D盘。

slf4j与logback的结合使用

一、logback的介绍

Logback是由log4j创始人设计的又一个开源日志组件。logback当前分成三个模块:logback-core,logback- classic和logback-access。logback-core是其它两个模块的基础模块。logback-classic是log4j的一个 改良版本。

此外logback-classic完整实现SLF4J API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging。logback-access访问模块与Servlet容器集成提供通过Http来访问日志的功能。 Logback是要与SLF4J结合起来用两个组件的官方网站如下:

logback的官方网站: http://logback.qos.ch

SLF4J的官方网站:http://www.slf4j.org

二、组件

Logback 分为三个模块:logback-core,logback-classic,logback-access。其中logback-core 是核心;logback-classic 改善了 log4j,且自身实现了 SLF4J API,所以即使用 Logback 你仍然可以使用其他的日志实现,如原始的 Log4J,java.util.logging 等;logback-access 让你方便的访问日志信息,如通过 http 的方式。

三、引用配置

1、 pom.xml文件:

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>1.7.12</version> 
</dependency> 
<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
    <version>1.7.12</version> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-core</artifactId> 
    <version>1.1.3</version> 
</dependency> 
<dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
    <version>1.1.3</version> 
</dependency>

2、logback.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <jmxConfigurator />
    <!-- 控制台输出日志 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
                %msg%n</pattern>
        </layout>
    </appender>
    <!-- 文件输出日志 (文件大小策略进行文件输出,超过指定大小对文件备份) -->
    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>xxxx.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
            <FileNamePattern>xxxx.log.%i.bak</FileNamePattern>
            <MinIndex>1</MinIndex>
            <MaxIndex>12</MaxIndex>
        </rollingPolicy>
        <triggeringPolicy
            class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>100MB</MaxFileSize>
        </triggeringPolicy>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -
                %msg%n</Pattern>
        </layout>
    </appender>
    <!--这里指定logger name 是为jmx设置日志级别做铺垫 -->
    <logger name="com.xxx.xxx">
        <level value="INFO" />
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </logger>
</configuration>

四、示例代码

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 
class Bar { 
    Logger logger = LoggerFactory.getLogger(Bar.class); 
    public void doIt() {
        logger.debug("doing my job");
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java 如何扫描指定包下类(包括jar中的java类)

    java 如何扫描指定包下类(包括jar中的java类)

    这篇文章主要介绍了java 如何扫描指定包下类(包括jar中的java类),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • java中的内部类内部接口用法说明

    java中的内部类内部接口用法说明

    这篇文章主要介绍了java中的内部类内部接口用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java导入导出csv格式文件完整版详解(附代码)

    Java导入导出csv格式文件完整版详解(附代码)

    在Java中你可以使用不同的库来导出CSV格式的文件,这篇文章主要给大家介绍了关于Java导入导出csv格式文件的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • J2ME 程序开发注意要点

    J2ME 程序开发注意要点

    讲Java基础的书籍中都是以J2SE来讲基础,这就给学习造成了一些不必要的麻烦,下面将J2ME中用到的和不需要的Java基础知识做一个简单的说明
    2016-07-07
  • Java的jps命令简介及使用示例详解

    Java的jps命令简介及使用示例详解

    jps是jdk提供的一个查看当前java进程的小工具, 可以看做是JavaVirtual Machine Process Status Tool的缩写,非常简单实用,本文重点给大家介绍下Java的jps命令使用,感兴趣的朋友一起看看吧
    2022-03-03
  • SpringBoot中间件ORM框架实现案例详解(Mybatis)

    SpringBoot中间件ORM框架实现案例详解(Mybatis)

    这篇文章主要介绍了SpringBoot中间件ORM框架实现案例详解(Mybatis),本篇文章提炼出mybatis最经典、最精简、最核心的代码设计,来实现一个mini-mybatis,从而熟悉并掌握ORM框架的涉及实现,需要的朋友可以参考下
    2023-07-07
  • 在Spring-Boot中如何使用@Value注解注入集合类

    在Spring-Boot中如何使用@Value注解注入集合类

    这篇文章主要介绍了在Spring-Boot中如何使用@Value注解注入集合类的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • 面试中遇到的java逃逸分析问题

    面试中遇到的java逃逸分析问题

    这篇文章主要介绍了面试中遇到的java逃逸分析问题,逃逸分析(Escape Analysis)简单来讲就是,Java Hotspot 虚拟机可以分析新创建对象的使用范围,并决定是否在 Java 堆上分配内存的一项技术。,需要的朋友可以参考下
    2019-06-06
  • selenium+java+chrome环境搭建的方法步骤

    selenium+java+chrome环境搭建的方法步骤

    这篇文章主要介绍了selenium+java+chrome环境搭建的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • java使用Feign实现声明式Restful风格调用

    java使用Feign实现声明式Restful风格调用

    这篇文章主要为大家详细介绍了java使用Feign实现声明式Restful风格调用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-04-04

最新评论