基于log4j2.properties踩坑与填坑

网友投稿 944 2022-11-12

基于log4j2.properties踩坑与填坑

基于log4j2.properties踩坑与填坑

目录log4j2.properties踩坑与填坑日志配置采坑格式化日志输出参数记录一份自己的配置文件Log4j2 properties配置文件

log4j2.properties踩坑与填坑

日志配置

门面模式:slf4j

日志库:log4j2

引入依赖:compile('org.springframework.boot:spring-boot-starter-log4j2:2.0.4.RELEASE')

采坑

启动Application时,出现Multiple bindings were found on the class path的问题

坑点:没有排除对默认logback的依赖

填坑:在build.gradle中加入:

configurations {

compile.exclude module: 'spring-boot-starter-logging'

}

启动后,没有按照配置好的格式输出

坑点:没有在application.[yml|properties]中声明配置文件的路径

填坑:在application.yml中加入

#指定log4j2配置文件的位置与名称

logging:

config: classpath:log4j2.properties

格式化日志输出参数

%m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

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

%c 输出所属的类目,通常就是所在类的全名

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

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)

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

%L 输出代码中的行号

%x 输出和当前线程相关联的NDC(嵌套诊断环境),像java servlets多客户多线程的应用中

%% 输出一个"%"字符

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:

%5c: 输出category名称,最小宽度是5,category<5,默认的情况下右对齐

%-5c:输出category名称,最小宽度是5,category<5,"-"号指定左对齐,会有空格

%.5c:输出category名称,最大宽度是5,category>5,就会将左边多出的字符截掉,<5不会有空格

%20.30c:category名称<20补空格,并且右对齐,>30字符,就从左边交远销出的字符截掉

记录一份自己的配置文件

实现控制台打印,以及基于时间和基于文件大小的本地保存策略。

name=PropertiesConfig

# 定义变量。指定日志文件的位置和文件名称,以便记录多份日志时,直接引用

property.fileName=qiyinzone

property.fileDir=./logs

propeOHKOtTkfrty.filePath=${fileDir}/${fileName}.log

appenders=console, rolling

# rootLogger, 根记录器,所有记录器的父辈

# 指定根日志的级别

rootLogger.level=info

# 指定输出的appender引用

rootLogger.appenderRef.stdout.ref=Stdout

rootLogger.appenderRef.rolling.ref=InfoRollingFile

# console

# 指定输出源的类型与名称

appender.console.type=Console

appender.console.name=Stdout

appender.console.layout.type=PatternLayout

# 输出模板

appender.console.layout.pattern=%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%5p] [%t] [%l] - %m%n}{FATAL=white, ERROR=red, WARN=blue, INFO=Green, DEBUG=Yellow, TRACE=blue}

# rolling file

appender.rolling.type=RollingFile

appender.rolling.name=InfoRollingFile

appender.rolling.fileName=${filePath}

# 指定当发生Rolling时,文件的转移和重命名规则

appender.rolling.filePattern=${fileDir}/${fileName}_%d{yyyy-MM-dd}_%i.log

appender.rolling.layout.type=PatternLayout

appender.rolling.layout.pattern=%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%5p] [%t] [%l] - %m%n}{FATAL=white, ERROR=red, WARN=blue, INFO=Green, DEBUG=Yellow, TRACE=blue}

# 指定记录文件的封存策略,该策略主要是完成周期性的日志文件封存工作

appender.rolling.policies.type=Policies

# 基于时间的触发策略

appender.rolling.policies.time.type=TimeBasedTriggeringPolicy

# 当前记录周期为每1h生成一个文件

appender.rolling.policies.time.interval=1

appender.rolling.policies.time.modulate=true

# 基于日志文件体积的触发策略

appender.rolling.policies.size.type=SizeBasedTriggeringPolicy

# 当日志文件体积大于size指定的值时,触发Rolling

appender.rolling.policies.size.size=20M

# 文件封存的覆盖策略

appender.rolling.strategy.type=DefaultRolloverStrategy

# 生成分割(封存)文件的个数

appender.rolling.strategy.max=100

打印效果

打印时,对不同level的日志定义了不同的字体颜色,方便定位。

%highlight{%d{yyyy-MM-dd HH:mm:ss.SSS} [%5p] [%t] [%l] - %m%n}{FATAL=white, ERROR=red, WARN=blue, INFO=Green, DEBUG=Yellow, TRACE=blue}

Log4j2 properties配置文件

原工作组比较清闲,被临时借调到新的工作组。组长给了个任务是把Log4j的XML配置文件改成properties,原因是XML格式的看着不舒服。哈,以上不算吐槽,只是交待一下,为什么我要这么费劲的使用properties做配置文件。

Log4j2 一开始抛弃了properties配置文件格式,到2.4版本时,又开始支持properties配置文件格式。到2.6版本又有新的要求。我用的是写本文时的最近版本2.8

status = error

property.LOG_HOME=/output/logs

property.BACKUP_HOME=backup

property.SERVER_NAME=buddie-Service

property.EVERY_FILE_SIZE=10M

property.OUTPUT_LOG_LEVEL=INFO

property.FILE_MAX=10

appender.console.type = Console

appender.console.name = STDOUT

appender.console.layout.type = PatternLayout

appender.console.layout.pattern = %m%n

appender.rolling.type=RollingFile

appender.rolling.name=RollingFileAll

appender.rolling.filter.threshold.level = trace

appender.rolling.filter.threhttp://shold.type = ThresholdFilter

appender.rolling.fileName=${LOG_HOME}/dev_${SERVER_NAME}_all.log

appender.rolling.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_NAME}_all.%d{yyyy-MM-dd-HH}.log

appender.rolling.layout.type=PatternLayout

appender.rolling.layout.pattern=%d %p %C{1.} [%t] %m%n

appender.rolling.policies.type=Policies

appender.rolling.policies.time.type=TimeBasedTriggeringPolicy

appender.rolling.policies.time.interval=2

appender.rolling.policies.time.modulate=true

appender.rolling.policies.size.type=SizeBasedTriggeringPolicy

appender.rolling.policies.size.size=${EVERY_FILE_SIZE}

appender.rolling.strategy.type=DefaultRolloverStrategy

appender.error.type=RollingFile

appender.error.name=RollingFileError

appender.error.filter.threshold.level = error

appender.error.filter.threshold.type = ThresholdFilter

appender.error.fileName=${LOG_HOME}/dev_${SERVER_NAME}_error.log

appender.error.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_NAME}_error.%d{yyyy-MM-dd-HH}.log

appender.error.layout.type=PatternLayout

appender.error.layout.pattern=%d %p %C{1.} [%t] %m%n

appender.error.policies.type=Policies

appender.error.policies.time.type=TimeBasedTriggeringPolicy

appender.error.policies.time.interval=2

appender.error.policies.time.modulate=true

appender.error.policies.size.type=SizeBasedTriggeringPolicy

appender.error.policies.size.size=${EVERY_FILE_SIZE}

appender.error.strategy.type=DefaultRolloverStrategy

appender.charge.type=RollingFile

appender.charge.name=RollingFileCharge

appender.charge.filter.threshold.level = trace

appender.charge.filter.threshold.type = ThresholdFilter

appender.charge.fileName=${LOG_HOME}/dev_${SERVER_NAME}_charge.log

appender.charge.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_NAME}_charge.%d{yyyy-MM-dd-HH}.log

appender.charge.layout.type=PatternLayout

appender.charge.layout.pattern=%d %p %C{1.} [%t] %m%n

appender.charge.policies.type=Policies

appender.charge.policies.time.type=TimeBasedTriggeringPolicy

appender.charge.policies.time.interval=2

appender.charge.policies.time.modulate=true

appender.charge.policies.size.type=SizeBasedTriggeringPolicy

appender.charge.policies.size.size=${EVERY_FILE_SIZE}

appender.charge.strategy.type=DefaultRolloverStrategy

logger.activity.name = buddie.activity

logger.activity.level = debug

logger.activity.additivity = false

logger.activity.appenderRef.all.ref = RollingFileAll

logger.activity.appenderRef.error.ref = RollingFileError

logger.activity.appenderRef.stdout.ref = STDOUT

logger.login.name = buddie.login

logger.login.level = debug

logger.login.additivity = false

logger.login.appenderRef.all.ref = RollingFileAll

logger.login.appenderRef.error.ref = RollingFileError

logger.login.appenderRef.stdout.ref = STDOUT

logger.charge.name = buddie.charge

logger.charge.level = trace

logger.charge.additivity = false

logger.charge.appenderRef.all.ref = RollingFileAll

logger.charge.appenderRef.error.ref = RollingFileError

logger.charge.appenderRef.charge.ref = RollingFileCharge

logger.charge.appenderRef.stdout.ref = STDOUT

rootLogger.level = info

rootLogger.appenderRef.stdout.ref = STDOUT

rootLogger.appenderRef.all.ref = RollingFileAll

rootLogger.appenderRef.error.ref = RollingFileError

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Aha!设计模式(48)-适配器(5)
下一篇:用VisualStudio2019预览版体验C++20新功能
相关文章

 发表评论

暂时没有评论,来抢沙发吧~