java日志使用slf4j配置log4j后,有日志文件但日志文件内容为空

liuxm-刘小明      2022-04-15     212

关键词:

SLF4J的全称是Simple Logging Facade for Java,即简单日志门面。

SLF4J并不是具体的日志框架,而是作为一个简单门面服务于各类日志框架,如java.util.logging, logback和log4j。

SLF4J支持{}作为占位符,等价于C语言中的%s,而不必再进行字符串的拼接,效率有显著的提。

1.slf4j使用

引入包 slf4j-api-1.6.2.jar

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class App{

    private static Logger logger = LoggerFactory.getLogger(App.class);

    public static void main(String[] args) {

        logger.info("info hello world");
        logger.error("error hello world");
        logger.debug("debug hello world");
        //输出参数比较多时可以使用占位符  (推荐此方法,不要使用字符串拼接)
        logger.debug("Processing trade with id: {} and symbol : {} ", id, symbol);
    }
}


2.与log4j集成

依赖包:slf4j-api-1.6.2.jar,slf4j-log4j12-1.6.2.jar ,log4j-1.2.17.jar
常见问题,配置log4j后,有日志文件,但日志文件内容为空。
原因:
a) slf4j 可能有多个绑定实现包,如slf4j-log4j12 与slf4j-jdk14 同时存在,删除一个包即可
b) 确认 sl4j-api与slf4j-log4j12版本是否一至,二者版本要保持一至才可以
c) 指定日志文件具体位置 log4j.appender.D.File=d:/debug.log

 

3.在src目录中创建log4j.properties (如果是maven项目,在src/main/resources目录中创建log4j.properties)

log4j.properties 

### 设置###
log4j.rootLogger=DEBUG,stdout,D,E,I
### 输出信息到控制抬 ###
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=[%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%n
### 输出DEBUG 级别以上的日志文件设置 ###
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File=debug.log
log4j.appender.D.Append=false
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
### 输出ERROR 级别以上的日志文件设置 ###
log4j.appender.E=org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File=error.log
log4j.appender.E.Append=true
log4j.appender.E.Threshold=ERROR
log4j.appender.E.layout=org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n
### 输出INFO 级别以上的日志文件设置 ###
log4j.appender.I=org.apache.log4j.RollingFileAppender
log4j.appender.I.File=info.log
log4j.appender.I.Append=true
log4j.appender.I.Threshold=INFO
log4j.appender.File.MaxFileSize=100KB
log4j.appender.I.MaxBackupIndex=15
log4j.appender.I.layout=org.apache.log4j.PatternLayout
log4j.appender.I.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss}  [ %t:%r ] - [ %p ]  %m%n

 







log4j/log4j2/logback混用问题

参考技术A如果不了解标题提到的几个日志框架,建议了解一下log4j/log4j2/logback简单使用说明,本节中pom依赖前面的内容;log4jdemolog4j2demologbackdemologdemojava项目一般会选择一种日志框架,但很难保证当前项目依赖的三方组件会选用... 查看详情

logger日志接口slf4j

...口,可以实现程序的解藕。SLF4J可以与log4j、logback、jdk等日志系统结合,以及在这些日志系统之间切换。  使用maven导入各个日志系统的jar包。需要注意的是要写相应的输出格式和级别配置,比如log4j的log4j.properties,对于另外... 查看详情

java项目日志系统的总结(代码片段)

目录日志系统归类以及关系日志的三个组件slf4j的使用项目中构建日志系统使用例子日志系统归类以及关系常用的日志框架:slf4j、logback、log4j、log4j2、JUL(javautillogging)、jboss-logging、JCL(jakartacommonlogging)log4j:最开始的一个日志系统... 查看详情

log4j和slf4j的使用

参考技术Asfl4j是简单日志门面,而log4j是一个完整的日志框架。一般在java开发的过程中,会将log4j和slf4j结合起来使用。该文件放到工程的resource目录下,且保证文件名是“log4j.properties”,不能做更改。具体配置可以参考如下进... 查看详情

java日志框架slf4j和log4j以及logback的联系和区别

1.SLF4J(SimpleloggingFacadeforJava)意思为简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,并不是一个具体的... 查看详情

为啥使用slf4j而不是log4j来做java日志

在代码中编写日志记录语句使用SLF4J的主要动机是让程序独立于任何特定的日志记录库,这些日志记录库可能需要与现在配置不同的配置,而且还会引入更多令人头疼的维护问题。然而除了这个之外,SLF4JAPI还有一个让您使用SLF4J... 查看详情

如何配置slf4j不同的日志实现

参考技术ASLF4J是一套简单的日志外观模式的JavaAPI,帮助在项目部署时对接各种日志实现。LogBack在运行时使用JMX帮助修改日志配置,在生产状态下无需重启应用程序。SLF4J是简单的日志外观模式框架,抽象了各种日志框架例如Logba... 查看详情

slf4j-一个允许你统一日志记录api的抽象层

一、什么是SLF4J我们在做Java开发时,如果需要记录日志,有很多日志API可供选择,如:java.util.loggingApachelog4jlogbackSLF4J又是个什么东东呢?为什么使用SLF4J比使用log4j或者java.util.logging更好呢?这是因为与所有提到的这些日志记录... 查看详情

阿里强制使用slf4j日志框架的缘由

参考技术A想必小伙伴们都用过日志,虽然日志看起来可有可无,但是等到出问题的时候,就比较棘手。所以说日志框架使用好不好,规范不规范,直接影响了解决生产环境故障的效率,日志框架选的不好、用的不好,有可能影... 查看详情

log4j+slf4j管理日志项目迁移logback+slf4j

...生,最近被安排了一个任务,原有的项目中使用的是log4j日志管理要转换成logbacak的日志管理。介于之前并未深究log4j和logback日志,所以做起来也很是头疼,不得不查询资料问别人,才勉强完成,所以记录一下从头的步骤,以供... 查看详情

springboot之日志记录

SpringBoot之日志记录SpringBoot支持集成Java世界主流的日志库。如果对于Java日志库不熟悉,可以参考:细说Java主流日志工具库关键词:log4j,log4j2,logback,slf4j日志格式控制台输出彩色打印文件输出日志级别日志组日志配置文件SpringBoot... 查看详情

java学习笔记-日志体系slf4j+log4j2(代码片段)

Java学习笔记-日志体系SLF4JLog4j2添加适配器依赖web.xml配置log4j2.xml参考资料SLF4JSimpleLoggingFacadeforJava(SLF4J)充当各种日志框架(例如java.util.logging、logback、log4j)的简单外观或抽象(外观模式),允许最终用户在部... 查看详情

java日志框架slf4j和log4j以及logback的联系和区别

1.SLF4J(SimpleloggingFacadeforJava)意思为简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,... 查看详情

java日志框架slf4j和log4j以及logback的联系和区别

1.SLF4J(SimpleloggingFacadeforJava)意思为简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,... 查看详情

java学习笔记-日志体系slf4j+log4j2(代码片段)

Java学习笔记-日志体系SLF4JLog4j2添加适配器依赖web.xml配置log4j2.xml参考资料SLF4JSimpleLoggingFacadeforJava(SLF4J)充当各种日志框架(例如java.util.logging、logback、log4j)的简单外观或抽象(外观模式),允许最终用户在部... 查看详情

slf4j与logback日志配置详解

背景javaweb下有好几种日志框架,比如:logback,log4j,log4j2(slj4f并不是一种日志框架,它相当于定义了规范,实现了这个规范的日志框架就能够用slj4f调用)。其中性能最高的应该使logback了,而且springboot默认使用的也是logback日... 查看详情

log4j,log4j2,logback,slf4j日志学习

日志学习笔记Log4jLog4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致... 查看详情

java日志框架slf4j和log4j以及logback的联系和区别

1.SLF4J(SimpleloggingFacadeforJava)意思为简单日志门面,它是把不同的日志系统的实现进行了具体的抽象化,只提供了统一的日志使用接口,使用时只需要按照其提供的接口方法进行调用即可,由于它只是一个接口,... 查看详情