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分别是打开全部日志和关闭全部日志。
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,我们可以控制日志信息输出到控制台、文件、甚至是数据库中。我们可以控制每一条日志的输出格式,通过定义日志的输出级别,可以更灵活的控制日志的输出过程。方便项目的调试。