Springboot配置Log4j日志系统,并将日志存入数据库

Log4j是apache公司开发的一款日志管理系统,可以高效的管理系统中出现的BUG或者各种信息,并且可以已文本的方式或者数据库存入的方式来记录数据

第一步:导入依赖

在pom.xml中导入Log4j依赖

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

第二步:创建数据库

create table error
(
    Id          int          not null AUTO_INCREMENT Primary Key comment '主键id',
    Log_Level   varchar(100) not null comment '日志级别',
    Log_Message varchar(500) not null comment '日志信息',
    Log_Tim     datetime DEFAULT CURRENT_TIMESTAMP comment '日志时间'

) engine = innodb
  default charset = utf8;

第三步:配置log4j.properties配置文件

在Resources文件夹下创建一个log4j.properties文件

image-20230609153907108

编写配置文件

# log4j 日志系统: 将日志内容插入到数据库
log4j.rootLogger=DEBUG, DB, console
# 指定Appender输出端
log4j.appender.DB=org.apache.log4j.jdbc.JDBCAppender
# 指定数据库连接池
log4j.appender.DB.URL=jdbc:mysql://localhost:3306/data
# 指定数据库驱动(注意区分5.7与8.0)
log4j.appender.DB.driver=com.mysql.cj.jdbc.Driver
# 指定数据库用户名
log4j.appender.DB.user=root
# 指定数据库密码
log4j.appender.DB.password=passwd
# 指定数据库SQL语句
log4j.appender.DB.sql=INSERT INTO error(Log_Level,Log_Message) VALUES('%p','%m')
# 指定Layout日志格格式化器
log4j.appender.DB.layout=org.apache.log4j.PatternLayout
# 将日志输出到控制台
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}]-[%t]-[%F:%L]-[%p]-[%c]-%m%n
log4j.appender.console.encoding=UTF-8

第四步:在程序代码中将出现的BUG存入数据库

这是个测试类

package com.example.userinfoserver;

import org.apache.log4j.Logger;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class UserInfoServerApplicationTests {
//    导入Logger类
    private static Logger logger = Logger.getLogger(UserInfoServerApplicationTests.class);
    @Test
    void TestDemo01() {
//        将把数据提报,并且存入数据库
        logger.error("这是一个示例BUG");
    }
}

运行测试类

image-20230609154609297

控制台输出

image-20230609154637305

数据库记录的数据

image-20230609154656868

可以看见,控制台和数据库表中都记录了自己定义的错误提示

附带参数说明

日志级别

Log4J 在 org.apache.log4j.Level 类中定义了OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL七种日志级别:

日志级别参数说明
OFF最高日志级别,关闭左右日志
FATAL将会导致应用程序退出的错误
ERROR发生错误事件,但仍不影响系统的继续运行
WARN警告,即潜在的错误情形
INFO一般和在粗粒度级别上,强调应用程序的运行全程
DEBUG一般用于细粒度级别上,对调试应用程序非常有帮助
ALL最低等级,打开所有日志记录

注:一般只使用4个级别,优先级从高到低为 ERROR > WARN > INFO > DEBUG

Appender(输出端)

Appender 用来指定日志输出到哪个地方,可以同时指定日志的输出目的地。Log4j 常用的输出目的地有以下几种:

输出端类型作用
ConsoleAppender将日志输出到控制台
FileAppender将日志输出到文件中
DailyRollingFileAppender将日志输出到一个日志文件,并且每天输出到一个新的文件
RollingFileAppender将日志信息输出到一个日志文件,并且指定文件的尺寸,当文件大 小达到指定尺寸时,会自动把文件改名,同时产生一个新的文件
JDBCAppender把日志信息保存到数据库中

Layout(日志格式化器)

格式化器类型作用
HTMLLayout格式化日志输出为HTML表格形式
SimpleLayout简单的日志输出格式化,打印的日志格式为(info - message)
PatternLayout最强大的格式化期,可以根据自定义格式输出日志,如果没有指定转换格式,就是用默认的转换格式

日志的输出格式

log4j 采用类似 C 语言的 printf 函数的打印格式格式化日志信息,具体的占位符及其含义如下:

%m   输出代码中指定的日志信息

%p    输出优先级,及 DEBUG、INFO 等

%n    换行符(Windows平台的换行符为 "\n",Unix 平台为 "\n")

%r     输出自应用启动到输出该 log 信息耗费的毫秒数

%c    输出打印语句所属的类的全名

%t     输出产生该日志的线程全名

%d    输出服务器当前时间,默认格式为 ISO8601,也可以在后面指定格式。如:%d{yyyy年MM月dd日 HH:mm:ss}

%l     输出日志时间发生的位置,包括类名、发生的线程,以及在代码中的行数,如:Test.main(Test.java:10)

%F    输出日志消息产生时所在的文件名称

%L    输出代码中的行号

%x    输出和当前线程相关的 NDC(嵌套诊断环境)

%%   输出一个 "%" 字符

可以在 % 与字符之间加上修饰符来控制最小宽度、最大宽度和文本的对其方式。如:
%5c    输出category名称,最小宽度是5,category<5,默认的情况下右对齐
%-5c   输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格
%.5c   输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格
%20.30c   category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盒子里的加菲猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值