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

author author     2022-10-02     301

关键词:

作为一个刚踏入java语言的小学生,最近被安排了一个任务,原有的项目中使用的是log4j日志管理 要转换成logbacak的日志管理。介于之前并未深究log4j和logback日志,所以做起来也很是头疼,不得不查询资料问别人,才勉强完成,所以记录一下从头的步骤,以供别人参考,有不对地方还请大神斧正。

首先提供一下log4j和slf4j以及logback的关系图

技术分享技术分享

第一步:我们项目是log4j+转slf4j管理的,要替换成logback,所以需要删除掉log4j和slf4j-log4j12的所有jar包依赖,项目中用到了maven依赖传递无法直接删除,我在maven的pom文件排除了相关依赖。

<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>

第二步:然后引入相关logback的jar包依赖

<!-- logback日志配置开始 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>1.7.7</version>
</dependency>
<!-- logback日志配置结束 -->

第三步:将原有的log4j.xml或者是log4j.properties删除掉,添加进来logback的配置文件logback.xml,格式依照网上的模板只是改变一下相应的输出位置和文件路径以及日志级别等

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!-- 定义日志文件 输入位置 -->
<property name="log_dir" value="/logs/log" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d %-5p %c{2} - [%m]%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="DEFAULT-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${log_dir}/default/default.log.%d{yyyyMMdd}</FileNamePattern>
<!-- 日志生成30天有效 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d %-5p %c{2} - [%m]%n</pattern>
</encoder>
</appender>

<appender name="BUSINESS-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${log_dir}/business/business.log.%d{yyyyMMdd}</FileNamePattern>
<!-- 日志生成30天有效 -->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d %-5p %c{2} - [%m]%n</pattern>
</encoder>
</appender>

<!-- ERROR级别日志 -->
<!-- 滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 RollingFileAppender -->
<appender name="ERROR-APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 过滤器,只记录ERROR级别的日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<!-- 最常用的滚动策略,它根据时间来制定滚动策略.既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志输出位置 -->
<fileNamePattern>${log_dir}/error/error.log.%d{yyyyMMdd}</fileNamePattern>
<!-- 保留 30天数据-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder charset="UTF-8">
<pattern>%d %-5p %c{2} - [%m]%n</pattern>
</encoder>
</appender>
<logger name="com.logs.user.log" additivity="false">
<level value="INFO"/>
<appender-ref ref="BUSINESS-APPENDER"/>
<appender-ref ref="ERROR-APPENDER"/>
</logger>
<!-- 日志输出级别 -->
<root level="DEBUG">
<appender-ref ref="DEFAULT-APPENDER" />
<appender-ref ref="ERROR-APPENDER" />
<appender-ref ref="STDOUT" />
</root>
</configuration>

最后一步:查看代码中引用的依赖和代码是否正确。

我们项目中有的用了slf4j,所以这个不用更改代码,因为logback适配到slf4j的代码完全与log4j一样。

如果是用了log4j管理的,那就要更改代码了。例如我们项目:

import org.log4j.Logger;引用了log4j的依赖

private static final Logger LOGGER = Logger.getLogger(Testcache.class)

更改后的代码:

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

private static final Logger LOGGER = LoggerFactory.getLogger(Testcache.class);

这样就结束了。也可以写一个本地方法来测试一下:

import org.slf4j.LoggerFactory;

import org.slf4j.Logger;

public class Test {

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

public static void main(String[] args) {
logger.debug("debug");
logger.info("info");
logger.error("error");
}
}

执行这个main方法查看日志的输出路径、位置、格式、都正确以后就ok了。













































































































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

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

slf4j+log4j2模式的日志搭建

...大家介绍一下我们我们在项目中必须得有的一个部分——日志!是的,就是那些让我们看着头疼的东西~~~好的日志可以帮助团队成员快速发现并解决问题,用好了可以大幅度提高代码缺陷修复效率!言归正传,今天先来讲讲如何... 查看详情

java项目中如何使用log4j和slf4j实现日志打印

...og4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIXSyslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日... 查看详情

java#在项目中使用slf4j+logback来记录日志(代码片段)

...eLoggingFacadeforJava。相当于一个门面,提供了Java中所有日志框架的简单抽象。使用SLF4J框架,可以在部署时,迁移到所需的日志记录框架(如Log4j,JUL,Simplelogging,NOP等)SLF4J支持参数化日志记录消息SLF4J... 查看详情

springboot的日志配置(logback+slf4j)简介(代码片段)

slf4j简介和技术选型市面上的日志框架:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....日志门面(日志的抽象层)日志实现JCL(JakartaCommonsLogging)SLF4j(SimpleLoggingFacadeforJava)jboss-loggingLog4jJUL(java.util.logging)Log4j2Logbac 查看详情

java#在项目中使用slf4j+logback来记录日志

...eLoggingFacadeforJava。相当于一个门面,提供了Java中所有日志框架的简单抽象。使用SLF4J框架,可以在部署时,迁移到所需的日志记录框架(如Log4j,JUL,Simplelogging,NOP等)SLF4J支持参数化日志记录消 查看详情

log4j/log4j2/logback混用问题

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

日志管理,springboot

1.市面上的日志框架;JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j....2.日志门面:SLF4J;日志实现:Logback;SpringBoot:底层是Spring框架,Spring框架默认是用JCL;‘SpringBoot选用SLF4j和logback;3.SLF4j使用3.1如何在系统中使用SLF4j  ht... 查看详情

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

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

log4j使用总结

...显得力不从心了,而且,所有的System.out.println都需要逐一管理,其对于输出也很难统一格式(特别是时间戳等重要信息)。因此建议养成在日常项目中使用log4j的习惯。 3、异常堆栈记录使用【voidorg.slf4j.Logger.error(Stringmsg,Throw... 查看详情

slf4j+log4j在java中实现日志记录

...简单又常用但必不可少的一样东西,那是什么呢?那就是日志记录,日志输出,日志保存。后面就统一用日志记录四个字来形容啦。日志记录是项目的开发中必不可少的一个环节,特别是对于后台服务节点程序来说,有了日志的... 查看详情

使用slf4j集成log4j2构建项目日志系统的完美解决方案

...近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见几种日志系统,而使用log4j2而不是log4j是因为L... 查看详情

log4j2+slf4j日志不打印问题

参考技术A问题原因:使用slf4j+log4j2时使用的桥接包是log4j-slf4j-impl,https://logging.apache.org/log4j/2.x/log4j-slf4j-impl/index.html项目中存在多个日志的实现(例如:slf4j-log4j12)通过mvndependency:tree查看现有依赖包,进行排除即可 查看详情

log4j升级到log4j2(项目中使用slf4j)

...案sring也适用。在这里给大家推荐一套目前最火的Java后端日志框架方案:门户日志用:slf4j日志实现用:log4j2具体的配置或者优化如下详情1、导入依赖log4j2应尽量使用同一版本,否则可能出现不兼容的情况//log升级配置compile('org.... 查看详情

log4j,log4j2,logback,slf4j日志学习

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

最全的springboot+logback日志配置教程

项目中日志系统是必不可少的,目前比较流行的日志框架有log4j、logback等,可能大家还不知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。另外slf4j(SimpleLoggingFacadeforJava)... 查看详情

logger日志接口slf4j

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

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

SLF4J的全称是SimpleLoggingFacadeforJava,即简单日志门面。SLF4J并不是具体的日志框架,而是作为一个简单门面服务于各类日志框架,如java.util.logging,logback和log4j。SLF4J支持{}作为占位符,等价于C语言中的%s,而不必再进行字符串的拼... 查看详情