log4j日志管理

本文介绍了log4j日志系统的关键组成部分,包括Logger、Appender和Layout,并详细阐述了日志级别及其配置。内容涵盖从最简单配置到复杂设置,如按文件大小或时间滚动生成日志,特定类独立日志文件,以及使用环境变量和JVM参数定制日志文件名。此外,还讨论了log4j与其他日志系统的比较和潜在问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:学知识,特别是开发技术,要有下面的观念

  1. 这是个什么东西?有什么作用?
  2. 找个例子,看下演示,或者自己动手做一下,知道并理解它能干什么。
  3. 这个东西怎么实现的,或者有配置的话,怎么配置的?配置项的中关键概念是那些?
  4. 这个东西和其他类似功能的东西的对比,优劣?
  5. 使用这个东西有什么潜在的问题吗?

一.log4j日志系统介绍

1.关键组成部分

  1. Logger:设置总体日志级别,和要设置的那些appender,可同时设置多个appender
  2. Appender:输出日志的位置,常见的输出到控制台,输出到文件
  3. Layout:输出日志的形式

2.日志级别

Logj4日志级别有5个DEBUG、INFO、WARN、ERROR和FATAL,Log4j有一个规则:只输出级别不低于设定级别的日志信息,所以如果你配置设置的级别是error,那么你在代码里用log.info()打印的日志不会输出.

3.输出日志文件的设置选择

  1. 滚动生成,设置一个时间周期X,过了X之后就生成一个新日志文件
  2. 滚动生成,设置一个文件大小阈值threld,日志文件到达threld时设置成一个新文件
  3. 可以设置日志文件的位置和名字,名字可以带参数(系统环境变量)
  4. 某个类的日志输出为独立的日志文件

二.具体配置

假设使用gradle作为构建工具

1.buidl gradle的配置

// 日志管理依赖
implementation group: 'org.slf4j', name: 'slf4j-api', version: '2.0.3'
implementation group: 'org.slf4j', name: 'slf4j-log4j12', version: '2.0.3', ext: 'pom'
implementation group: 'org.apache.logging.log4j', name: 'log4j-to-slf4j', version: '2.19.0'

2.log4j.properties

这一部分就要根据你的不同选择来进行个性化配置了,以下根据你想要的设置的功能来进行设置

2.1 最简单的配置

log4j.rootLogger=info, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

2.2 输出到固定日志文件

log4j.rootLogger=info, stdout, fileOut
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
##### 输出到固定file的格式
# 输出到file
log4j.appender.fileOut=org.apache.log4j.FileAppender
# 设置输出到file的日志级别,会覆盖rootLogger里设置得全局日志级别
log4j.appender.fileOut.Threshold=info
# true表示消息增加到指定文件中
log4j.appender.fileOut.Append=true
# 指定消息输出的位置/logging.log4j
#log4j.appender.fileOut.File=${env: LOG_HOME}
#log4j.appender.fileOut.File=${sys: log.home}
log4j.appender.fileOut.File=D:/logs/log4j.log
# 指定消息的输出格式,不指定格式的话,消息无法输出
# org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
log4j.appender.fileOut.layout=org.apache.log4j.PatternLayout
# ConversionPattern指定具体的日志消息格式
log4j.appender.fileOut.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

2.2 设置按照日志文件大小滚动生成日志文件

log4j.rootLogger=debug, stdout, fileOut, rollingFile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

##### 输出到按照大小滚动的滚动日志文件
log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingFile.Threshold=DEBUG
# ImmediateFlush=true:表示所有消息都会被立即输出
log4j.appender.rollingFile.ImmediateFlush=true
log4j.appender.rollingFile.Append=true
log4j.appender.rollingFile.File=D:/logs/log.log4j

# MaxFileSize=100KB,在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中
# 后缀可以是KB, MB 或者GB。
log4j.appender.rollingFile.MaxFileSize=5KB
# MaxBackupIndex=2:指定可以产生的滚动文件的最大数
# 例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件。
log4j.appender.rollingFile.MaxBackupIndex=5
log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

运行的例子:

2.3 设置按照时间滚动生成日志文件

滚动方式:

(1)如果设置成按照天滚动,则就是每天生成一个日志文件,当前的日志文件是没有日期后缀的,而是会把之前生成的日志加上设置的日期后缀,类似下图

在这里插入图片描述

(2) 如果设置小时,就是每小时一个日志文件,本小时的日志文件是没有日期后缀的,而是会把之前生成的日志加上设置的日期后缀

(3) 设置成分钟,同上,这个日期后缀是上个日志文件最后的修改时间

设置成分钟rolling的log4j.properties的配置

log4j.rootLogger=debug, stdout, fileOut, rollingFile, timeRollingFile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# 定期回滚日志文件(timeRollingFile)
log4j.appender.timeRollingFile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.timeRollingFile.Threshold=DEBUG
log4j.appender.timeRollingFile.ImmediateFlush=true
log4j.appender.timeRollingFile.Append=true
log4j.appender.timeRollingFile.File=D:/logs/log.log4j
log4j.appender.timeRollingFile.DatePattern=_yyyy-MM-dd-HH-mm'.log'
log4j.appender.timeRollingFile.layout=org.apache.log4j.PatternLayout
log4j.appender.timeRollingFile.layout.ConversionPattern=[%d{MM-dd HH:mm:ss}] [%p] [%c:%L] %m%n

主要是DatePattern的设置关系决定是否是按照每个月、每天、每小时、每分钟

DatePattern='_'yyyy-MM-dd'.log':每天滚动一次文件,即每天产生一个新的文件。当然也可以指定按月、周、天、时和分。即对应的格式如下:
1)'.'yyyy-MM: 每月
2)'.'yyyy-ww: 每周 
3)'.'yyyy-MM-dd: 每天
4)'.'yyyy-MM-dd-a: 每天两次
5)'.'yyyy-MM-dd-HH: 每小时
6)'.'yyyy-MM-dd-HH-mm: 每分钟
 

参考:log4j生成文件名带日期的文件_Kevin-Zeng的博客-优快云博客_log4j文件名日期格式

2.4 设置某个具体类输出一个独立的日志文件

2.5 使用系统环境变量、java虚拟机参数变量作为日志文件名字的一部分

(1)系统变量{env:env_name},测试失败,无法读取

(2)虚拟机参数:{name}

指定file位置:

-DLOG_HOME="D:\\logs\\log4j.log"

log4j.properties配置:

log4j.appender.fileOut.File=${LOG_HOME}

2.6 同时使用多个appender

2.7 layout的不同格式配置

log4j的安全

log4j2是什么

slf4j是什么

其他日志系统?

...

参考:Log4j.properties配置详解【log4j配置文件】_Archie_java的博客-优快云博客_log4j配置文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值