Java常用框架精讲4一文搞懂logback系统日志工具(附实战代码)

Hello,大家好。这里是老K分享的全网最完整的Java系列教程。

程序员的维护调试都离不开系统日志,常用的系统日志工具包有log4j和logback。

本期我们分享的是logback这个工具包。

不过,logback和log4j之间有着千丝万缕的联系 ,这点我们之后再讲。

这次先来看看logback。


一、准备工作

1. pom.xml

在IDEA中新建maven项目后,第一步就是配置pom文件,我们这里主要展示需要导入的依赖,maven的其它配置可以参考我之前的文章,此处有传送门:《Java项目工程管理神器,构建框架必用 | Java常用框架精讲(二)》


    
        org.mybatis
        mybatis
        3.5.1
    
    
        mysql
        mysql-connector-java
        5.1.47
    
    
        junit
        junit
        4.12
    
    
        ch.qos.logback
        logback-classic
        1.4.5
    

2. 配置MyBatis

本次实战demo,我们会基于Mybatis的应用场景,所以我们需要配置一些关于MyBatis的设置:

关于MyBatis相关的知识,本例只是点到为止,要了解Mybatis系统知识的 或 对本例中MyBatis有不理解的,可以移步到我直接介绍MyBatis的文章:《MyBatis精讲(一)MyBatis基础配置及持久层连接创建代码实战)》

配置mybatis-config.xml:

<?xml version="1.0" encoding="utf-8" ?>


    
        
    
    
        
            
            
                
                
                
                
            
        
    

3. 创建数据库

这个步骤不一定要和我的内容一致,但为了达到比较好的演示效果,大家可以在自己的数据库中导入以下sql语句:

DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee`  (
  `id` int UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `depart` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `salary` decimal(10, 2) NOT NULL,
  `age` int NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

DROP TABLE IF EXISTS `department`;
CREATE TABLE `department`  (
  `did` int UNSIGNED NOT NULL AUTO_INCREMENT,
  `depart` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  `member` int NULL DEFAULT NULL,
  PRIMARY KEY (`did`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

INSERT INTO `employee` VALUES (5001, '赵乾', '销售部', 6000.00, 28);
INSERT INTO `employee` VALUES (5002, '孙礼', '销售部', 7000.00, 34);
INSERT INTO `employee` VALUES (6001, '周武', '技术部', 6500.00, 27);
INSERT INTO `employee` VALUES (6002, '郑望', '技术部', 7500.00, 40);

INSERT INTO `department` VALUES (1, '销售部', 5);
INSERT INTO `department` VALUES (2, '技术部', 6);

4. 编写测试用例

最后一步是编写测试用例,一般是放置在./test/java/路径下。

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;

import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class MyBatisTest {
    @Test
    public void testSelect() throws IOException {
        Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
        SqlSession sqlSession = null;
        try {
            sqlSession = sqlSessionFactory.openSession();
            Connection connection = sqlSession.getConnection();
            String sql = "select * from employee order by id desc limit 10";
            PreparedStatement stmt = connection.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                System.out.println(rs.getString("name"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (sqlSession != null) {
                sqlSession.close();
            }
        }
    }
}

二、第一次尝试

1. MyBatis的默认日志

有了上述的准备,我们并且在pom.xml里配置好logback依赖,这时候运行测试用例,就能看到logging日志在console里输出了,内容如下:

17:26:02.931 [main] DEBUG org.apache.ibatis.logging.LogFactory - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
17:26:02.936 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
17:26:02.936 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
17:26:02.936 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
17:26:02.936 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - PooledDataSource forcefully closed/removed all connections.
17:26:02.970 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Opening JDBC Connection
Sat Dec 03 17:26:03 CST 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
17:26:03.371 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Created connection 1497845528.
17:26:03.371 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@59474f18]
郑望
周武
孙礼
赵乾
17:26:03.378 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@59474f18]
17:26:03.378 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@59474f18]
17:26:03.378 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 1497845528 to pool.

2. 自定义日志格式

以上是MyBatis运行后的默认日志格式,如果有需要调整日志格式,可以通过在./src/main/resources/路径下新建logback.xml后进行设置。

以下是标准化配置代码:

<?xml version="1.0" encoding="UTF-8" ?>

    
        
            %d{yyyy-MM-dd} [%thread] %-3level %logger{12} %msg%n
        
    
    
        
    

配置好上述xml文件,再次输出日志,结果就会变成这样:

2022-12-03 [main] DEBUG o.a.i.l.LogFactory Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
2022-12-03 [main] DEBUG o.a.i.d.p.PooledDataSource PooledDataSource forcefully closed/removed all connections.
2022-12-03 [main] DEBUG o.a.i.d.p.PooledDataSource PooledDataSource forcefully closed/removed all connections.
2022-12-03 [main] DEBUG o.a.i.d.p.PooledDataSource PooledDataSource forcefully closed/removed all connections.
2022-12-03 [main] DEBUG o.a.i.d.p.PooledDataSource PooledDataSource forcefully closed/removed all connections.
2022-12-03 [main] DEBUG o.a.i.t.j.JdbcTransaction Opening JDBC Connection
Sat Dec 03 17:39:08 CST 2022 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
2022-12-03 [main] DEBUG o.a.i.d.p.PooledDataSource Created connection 1431467659.
2022-12-03 [main] DEBUG o.a.i.t.j.JdbcTransaction Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5552768b]
郑望
周武
孙礼
赵乾
2022-12-03 [main] DEBUG o.a.i.t.j.JdbcTransaction Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@5552768b]
2022-12-03 [main] DEBUG o.a.i.t.j.JdbcTransaction Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@5552768b]
2022-12-03 [main] DEBUG o.a.i.d.p.PooledDataSource Returned connection 1431467659 to pool.

经过上述设置,日志开头变成了日期,而执行位置logger被裁剪了,父目录用首字母表示了。

3. 模板语法

基础语法是%command{parameter}

以上例中的语法为例,对其变量进行说明:

%d{yyyy-MM-dd} [%thread] %-5level %logger{12} %msg%n

命令符

输出内容

说明

%d

日期时间

可以设置时间格式:y/年、M/月、d/日、H/时、m/分、s/秒、S/毫秒等

%thread

当前线程

反应当前所在线程

%-5level

设置输出级别

此处-5表示对其格式为5字符。输出级别有:error/错误、warn/警报、info/信息、debug/调试、trace/追踪,优先级从高到低。

%logger

代码执行位置

反应当前语句所在文件路径,参数中的数字是输出字符串长度上限,超过上限则父目录名以首字母表示

%msg

日志内容


%n

换行符



三、调用lagback

以上是在利用MyBatis默认配置,输出log日志的效果,下面我们提供一个demo,教你如何编写自己的日志内容:

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

public class LogbackTest {

    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(LogbackTest.class);
        logger.info("Hello World");
    }
}

上述代码运行后得到的结果是:

2022-12-03 [main] INFO  LogbackTest Hello World

您可以参考上例实例化一个Logger,然后在你程序需要的位置,通过logger的API方法输出指定级别的日志。


以上,就是我们的常用系统日志工具logback的全部内容了。

本期的内容较多,建议可以收藏这篇文章,多读几遍慢慢消化。

如果你对老K分享的内容有任何疑问,欢迎随时在评论区留言或者私信我。

正在学习的小伙伴记得给老K一个赞哦,你的支持是我持续输出课程内容最大的动力!

阅读推荐

我也分享过其他关于如何学习Java的文章,有需要的小伙伴可以点击下方链接获取:

《IT大佬推荐!学习Java的最优路径 分享多个阶段的学习资源 建议收藏》

结束语

我是专注于开发领域的@老K玩代码,会持续生产关于如何学习编程语言的优质内容。

如果你想学习Java编程,或者想精进你的Java编程能力,可以关注我。

如果你对开发、编程有任何疑问或者有想了解的内容,而我暂时没有写到的,也欢迎随时来找我聊聊。

#头条创作挑战赛#

展开阅读全文

页面更新:2024-03-13

标签:技术部   代码   销售部   日志   语法   路径   实战   框架   级别   常用   格式   测试   工具   内容   系统

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top