ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Log日志框架汇总

2026/8/9 17:34:08 拓冰建站 浏览量
Log日志框架汇总

1 Logback

1.1 Logback下载


一般情况,Logback日志框架只需要下载slf4j-api、logback-core、logback-classic这三个jar包即可。

(一)快捷下载方法
slf4j-api-1.7.26.jar官网下载链接:
https://repo1.maven.org/maven2/org/slf4j/slf4j-api/1.7.26/
logback-core-1.2.3.jar官网下载链接:
https://repo1.maven.org/maven2/ch/qos/logback/logback-core/1.2.3/
logback-classic-1.2.3.jar官网下载链接:
https://repo1.maven.org/maven2/ch/qos/logback/logback-classic/1.2.3/


1.2 Logback使用

1.2.1 通过手动导包方式引入(不推荐)

1)在项目下新建文件夹lib,导入Logback的相关jar包到该文件夹下,并将lib文件夹手动添加到项目依赖库中去。
2)将Logback的核心配置文件logback.xml(名称固定)直接拷贝到src目录下(必须是src目录下)。

a.绝对路径

<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- CONSOLE :表示当前的日志信息是可以输出到控制台的 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <!--输出流对象 默认 System.out 改为 System.err 其中err:控制台输出日志为红色,而out为黑色--> <target>System.out</target> <encoder> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%n</pattern> </encoder> </appender> <!-- File:表示当前的日志信息是可以输出到文件的 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!--日志输出路径(logback_message.log是文档名,下方还有一处文件名(不用写.log))--> <file>D:\logback\logback_message.log</file> <!--指定日志文件拆分和压缩规则(防止文件过大)--> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--通过指定压缩文件名称,来确定分割文件方式--> <fileNamePattern>D:\logback\logback_message-%d{yyyy-MMdd}.log%i.gz</fileNamePattern> <maxFileSize>1MB</maxFileSize> <!--文件拆分大小--> </rollingPolicy> </appender> <!-- level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF (关掉), 默认debug(可忽略大小写) <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。 --> <root level="ALL"> <!--打印规则:只打印不低于当前级别的日志--> <appender-ref ref="CONSOLE"/> <!--如果这个地方不配置关联打印的位置,改位置将不会记录日志--> <appender-ref ref="FILE" /> </root> </configuration>

b.相对路径

<?xml version="1.0" encoding="UTF-8"?> <configuration> <!--三种相对路径--> <!--1. value="logs" 即value="./logs" – 表示保存到程序运行目录 ./logs等同于logs--> <!--2. value="/logs" – 表示保存到系统目录--> <!--3. value=“../logs” – 表示保存到程序运行目录的父目录--> <proprety name="LOG_PATH" value="./logs" /> <!-- CONSOLE :表示当前的日志信息是可以输出到控制台的 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <!--输出流对象 默认 System.out 改为 System.err 其中err:控制台输出日志为红色,而out为黑色--> <target>System.out</target> <encoder> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %c [%thread] : %msg%n</pattern> </encoder> </appender> <!-- File:表示当前的日志信息是可以输出到文件的 --> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!--日志输出路径(logback_message.log是文档名,下方还有一处文件名(不用写.log))--> <file>log\logback_message.log</file> <!--指定日志文件拆分和压缩规则(防止文件过大)--> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!--通过指定压缩文件名称,来确定分割文件方式--> <fileNamePattern>${LOG_PATH}\logback_message-%d{yyyy-MMdd}.log%i.gz</fileNamePattern> <maxFileSize>1MB</maxFileSize> <!--文件拆分大小--> </rollingPolicy> </appender> <!-- level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF (关掉), 默认debug(可忽略大小写) <root>可以包含零个或多个<appender-ref>元素,标识这个输出位置将会被本日志级别控制。 --> <root level="ALL"> <!--打印规则:只打印不低于当前级别的日志--> <appender-ref ref="CONSOLE"/> <!--如果这个地方不配置关联打印的位置,改位置将不会记录日志--> <appender-ref ref="FILE" /> </root> </configuration>


3)在代码中获取日志的对象与使用

getLogger("LogBackUtil");-------值为类名

import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * @Auther lmy * @date 2024-03-25 23:14 * @Description This is description of code */ public class LogBackUtil { public static final Logger LOGGER = LoggerFactory.getLogger("LogBackUtil"); public static void main(String[] args) { LOGGER.error("出错啦error"); LOGGER.warn("警告!warn"); LOGGER.info("收账啦info"); LOGGER.debug("没出错!debug"); LOGGER.trace("跟踪中trace"); } }


4)使用日志对象输出日志信息
在控制台中输出

在日志文件中输出

1.2.2 maven方式引入

1)在maven项目中的pom.xml文件中引入依赖(logback-classic会依赖另外两个包)

<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> <scope>test</scope> </dependency>


2)将Logback的核心配置文件logback.xml(名称固定)直接拷贝到maven项目的资源路径resources下


1.3 日志输出级别


level可等于TRACE、DEBUG、INFO、WARN、ERROR、ALL、OFF或不写。
作用:用于控制系统中哪些日志级别是可输出的。
规则:
1)级别:TRACE<DEBUG<INFO<WARN<ERROR(可以忽略大小写);
2)默认级别是debug(即可不写level=“DEBUG”);
3)只输出不低于当前级别的日志;
4)ALL和OFF分别是打开全部日志和关闭全部日志。

1.4 springboot项目中配置:

<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true" scanPeriod="10 seconds" debug="false"> <!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 --> <!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true --> <!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 --> <!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 --> <contextName>logback</contextName> <!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 --> <property name="log.path" value="log" /> <property name="console_log_pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level : %msg%n"/> <property name="charset" value="UTF-8"/> <!--输出到控制台--> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--> <!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 --> <!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>DEBUG</level> </filter> <encoder> <pattern>${console_log_pattern}</pattern> </encoder> </appender> <!--输出到文件,只记录INFO级别信息--> <appender name="info_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.path}/info/logback.%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <encoder> <pattern>${console_log_pattern}</pattern> <charset>${charset}</charset> </encoder> <!-- 日志记录器的滚动策略,按日期,按大小记录 --> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 每天日志归档路径以及格式 --> <fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>100MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> <!--日志文件保留天数--> <maxHistory>15</maxHistory> </rollingPolicy> <!-- 如果超过10MB就删除 --> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>10MB</maxFileSize> </triggeringPolicy> <!-- 此日志文件只记录info级别的 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--输出到文件,只记录WARN级别信息--> <appender name="warn_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> </appender> <!--输出到文件,只记录ERROR级别信息--> <appender name="error_file" class="ch.qos.logback.core.rolling.RollingFileAppender"> </appender> <!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG 可以包含零个或多个appender元素。 --> <root level="info"> <appender-ref ref="console" /> <appender-ref ref="info_file" /> <appender-ref ref="warn_file"/> <appender-ref ref="error_file"/> </root> <!-- <logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。 <logger>仅有一个name属性, 一个可选的level和一个可选的additivity属性。 name:用来指定受此logger约束的某一个包或者具体的某一个类。 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF, 如果未设置此属性,那么当前logger将会继承上级的级别。 additivity:是否向上级logger传递打印信息,默认是true --> <!-- 使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作: 第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息 第二种就是单独给mapper下目录配置DEBUG模式,代码如下,这样配置sql语句会打印,其他还是正常DEBUG级别: --> <logger name="com.hyh.logback.web.LogTestController" level="WARN" additivity="false"> <appender-ref ref="console"/> <appender-ref ref="warn_file"/> <appender-ref ref="error_file"/> </logger> <!-- 如果多环境开发可以用springProfile --> <!--开发环境:打印控制台--> <springProfile name="dev"> <!--可以输出项目中的debug日志,包括mybatis的sql日志--> <logger name="com.hyh.logback.web" level="DEBUG"> <appender-ref ref="console"/> </logger> <!-- root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性 level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG 可以包含零个或多个appender元素。 --> <root level="INFO"> <appender-ref ref="console"/> </root> </springProfile> </configuration>

2 JUL(了解)

JUL全称Java util Logging是java原生的日志框架,使用时不需要另外引用第三方类库,相对其他日志框架使用方便,学习简单,能够在小型应用中灵活使用。

package com.example; import org.junit.jupiter.api.Test; import java.io.IOException; import java.util.logging.*; /** * @Auther lmy * @date 2024-06-04 23:26 * @Description This is description of code */ public class Main { @Test public void testJUL() { //1.获取日志记录器对象 Logger logger = Logger.getLogger("com.example.Main"); //2.日志记录输出 logger.info("hello,JUL LOG"); //通用方法进行日志记录 logger.log(Level.INFO, "info msg"); //通用占位符方式输出变量值 String name = "Tom"; Integer age = 18; logger.log(Level.INFO, "用户信息:{0},{1}", new Object[]{name, age}); } //日志级别 @Test public void testLogLevel() { //1.获取日志记录器对象 Logger logger = Logger.getLogger("com.example.Main"); //2.日志记录输出 logger.severe("severe"); logger.warning("warning"); logger.info("info"); //jul 默认日志级别 info 只输出以上三个 logger.config("config"); logger.fine("fine"); logger.finer("finer"); logger.finest("finest"); } //自定义日志级别 @Test public void testLogConfig() throws IOException { //1.获取日志记录器对象 Logger logger = Logger.getLogger("com.example.Main"); //关闭系统默认配置 logger.setUseParentHandlers(false); //自定义配置日志级别 //创建ConsoleHandler 控制台输出 ConsoleHandler consoleHandler = new ConsoleHandler(); //创建简单格式转换对象 SimpleFormatter simpleFormatter = new SimpleFormatter(); //进行关联 consoleHandler.setFormatter(simpleFormatter); logger.addHandler(consoleHandler); //配置日志具体级别 logger.setLevel(Level.ALL); consoleHandler.setLevel(Level.ALL); //创建FileHandler 文件输出 FileHandler fileHandler = new FileHandler("./jul.log"); //进行关联 fileHandler.setFormatter(simpleFormatter); logger.addHandler(fileHandler); //2.日志记录输出 logger.severe("severe"); logger.warning("warning"); logger.info("info"); //jul 默认日志级别 info 只输出以上三个 logger.config("config"); logger.fine("fine"); logger.finer("finer"); logger.finest("finest"); } }

3.LOG4J

Log4j是Apache下的一款开源的日志框架,通过在项目中使用Log4,我们可以控制日志信息输出到控制台、文件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。

官方网站: http://logging.apache.org/log4j/1.2/