日志框架-Log4J(学习记录三)

1、简单介绍

Log4j(Log for java)是 Apache 的一个开源项目,通过使用 Log4j,可以控制日志信息输送的目的地是控制台或文件等,也可以控制每一条日志的输出格式。通过定义每一条日志信息的级别,能够更加细致地控制日志的生成过程。这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。使用 Log4j 技术,主要使用的是其配置文件。

2、组件介绍

2.1、记录器-Loggers

Loggers(记录器)控制日志的输出级别,规则是:只输出级别不低于设定级别的日志信息。

级别由低到高

  • all:打开所有日志记录开关;是最低等级的
  • TRACE:输出追踪信息;一般情况下并不会使用
  • DEBUG(默认):输出调试信息;打印些重要的运行信息
  • INFO:输出提示信息;突出应用程序运行过程
  • WARN:输出警告信息;会出现潜在错误的情况
  • ERROR:输出错误信息;不影响系统的继续运行
  • FATAL:输出致命错误;会导致应用程序的退出
  • OFF:关闭所有日志记录开关;是最高等级的

2.2、输出器-Appender

Appender(输出器) 通常只负责将日志信息写入目标目的地。将格式化日志信息的责任委托给 Layout(格式器)。定义一个名字以便被 Loggers(记录器)引用。

  1. ConsoleAppender(控制台输出器):将日志信息输出到控制台
  2. FileAppender(文件输出器):将日志信息写入指定文件
  3. DailyRollingFileAppender(按天拆分文件输出器):将日志信息写入指定文件,每天一个新文件
  4. RollingFileAppender(拆分文件输出器):将日志信息写入多个文件(按照大小)
  5. JDBCAppender(数据库输出器):将日志信息写入数据库表(可以将日志信息持久化)

2.3、格式器-Layout

Layout(格式器)接收 Appender(输出器)的日志信息将其格式化为满足任何消费日志事件需求的样式。

  1. SimpleLayout(简单格式器):将日志信息输出为简单格式,默认为 INFO 级别的消息
  2. PatternLayout(自定义格式器):根据自定义的转换模式,返回格式化后的日志信息结果

PatternLayout详解:

3、配置文件

配置说明:

log4j.rootLogger=日志级别,引用输出器
log4j.appender.自定义输出控制器名称=输出方式
log4j.appender.自定义输出控制器名称.layout=输出格式

 示列:创建log4j.properties

#配置日志级别,引用输出器
log4j.rootLogger=INFO,con
#配置控制台输出器
log4j.appender.con=org.apache.log4j.ConsoleAppender
#配置简单格式器
log4j.appender.con.layout=org.apache.log4j.SimpleLayout

代码:

 @Test
    public void test02() {
        // 已有配置文件,无需再加载初始化配置
        //BasicConfigurator.configure();
        Logger logger = Logger.getLogger(Log4jTest.class);
        logger.trace("trace信息");
        logger.debug("debug信息");
        logger.info("info信息");
        logger.warn("warn信息");
        logger.error("error信息");
        logger.fatal("fatal信息");
    }

输出结果:

INFO - info信息
WARN - warn信息
ERROR - error信息
FATAL - fatal信息

修改输出格式:PatternLayout

#配置日志级别,引用输出器
log4j.rootLogger=INFO,con

########## 控制台输出器 ##########
#配置控制台输出器
log4j.appender.con=org.apache.log4j.ConsoleAppender
#配置自定义格式器
log4j.appender.con.layout=org.apache.log4j.PatternLayout
#配置自定义转换模式
log4j.appender.con.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5p] [%t] [%-4rms] [%c] %M %L %m%n

输出结果:和上面不一样了就

[2023-06-04 17:09:11.586] [INFO ] [main] [0   ms] [com.xb.Log4jTest] test02 37 info信息
[2023-06-04 17:09:11.589] [WARN ] [main] [3   ms] [com.xb.Log4jTest] test02 38 warn信息
[2023-06-04 17:09:11.589] [ERROR] [main] [3   ms] [com.xb.Log4jTest] test02 39 error信息
[2023-06-04 17:09:11.589] [FATAL] [main] [3   ms] [com.xb.Log4jTest] test02 40 fatal信息

4、日志信息写入文件及保存

修改配置:

#配置日志级别,引用输出器
log4j.rootLogger=INFO,myFile


########## 文件输出器 ##########
#配置控制台输出器
log4j.appender.myFile=org.apache.log4j.FileAppender
#配置自定义格式器
log4j.appender.myFile.layout=org.apache.log4j.PatternLayout
#配置自定义转换模式
log4j.appender.myFile.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5p] [%t] [%-4rms] [%c] %M %L %m%n
#配置保存位置
log4j.appender.myFile.file=./src/logDir/file.log
#配置字符集编码
log4j.appender.myFile.encoding=UTF-8

问题:日志太多不方便管理,使用子类来管理,就是前面的那对应appender

按照文件大小拆分保存,相关配置:

########## 文件大小输出器 ##########
#配置控制台输出器
log4j.appender.roFile=org.apache.log4j.RollingFileAppender
#配置自定义格式器
log4j.appender.roFile.layout=org.apache.log4j.PatternLayout
#配置自定义转换模式
log4j.appender.roFile.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5p] [%t] [%-4rms] [%c] %M %L %m%n
#配置保存位置
log4j.appender.roFile.file=./src/logDir/roFile.log
#配置字符集编码
log4j.appender.roFile.encoding=UTF-8
#配置文件大小
log4j.appender.roFile.maxFileSize=1kb
#配置拆分文件数量
log4j.appender.roFile.maxBackupIndex=2

#若文件大小超过1KB,则生成另外一个文件,数量最多2个。
#若2个文件不够用,则按照时间来进行覆盖,保留新的覆盖旧的。

按照时间进行拆分保存,相关配置:

########## 时间输出器 DailyRollingFileAppender##########
#配置控制台输出器
log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
#配置自定义格式器
log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
#配置自定义转换模式
log4j.appender.dailyFile.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5p] [%t] [%-4rms] [%c] %M %L %m%n
#配置保存位置
log4j.appender.dailyFile.file=./src/logDir/dailyFile.log
#配置字符集编码
log4j.appender.dailyFile.encoding=UTF-8
#配置日期格式
log4j.appender.dailyRollingFile.datePattern='.'yyyy-MM-dd

 保存如数据库,相关配置:

首先创建好表,然后根据表修改配置文件:

#配置日志级别,输出控制器
log4j.rootLogger=INFO,db

########## 数据库输出器 ##########
#配置数据库输出器
log4j.appender.db=org.apache.log4j.jdbc.JDBCAppender
#配置自定义格式器
log4j.appender.db.layout=org.apache.log4j.PatternLayout
#配置自定义转换模式
log4j.appender.db.layout.conversionPattern=[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5p] [%t] [%-4rms] [%c] %M %L %m%n
#配置数据库
log4j.appender.db.URL=jdbc:mysql://localhost:3306/test
log4j.appender.db.Driver=com.mysql.cj.jdbc.Driver
log4j.appender.db.User=用户名
log4j.appender.db.Password=密码
log4j.appender.db.Sql=insert into log4j (name, createTime, level, thread, className, method, lineNumber, message) \
  values ('log', '%d{yyyy-MM-dd HH:mm:ss.SSS}', '%p', '%t', '%c', '%M', '%L', '%m');

自定义logger:

从输出位置来看:控制台输出了信息,日志文件也输出了信息。所以可以得出结论,如果根节点的logger和自定义父logger配置的输出位置是不同的则取二者的并集,配置的位置都会进行输出操作。

从级别来看:以自定义的父logger级别输出为主

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值