门面模式:slf4j
日志库:log4j2
引入依赖:compile(‘org.springframework.boot:spring-boot-starter-log4j2:2.0.4.relea’)
启动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 rvlets多客户多线程的应用中%%
输出一个”%”字符可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
%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=qiyinzoneproperty.filedir=./logsproperty.filepath=${filedir}/${filename}.logappenders=console, rolling # rootlogger, 根记录器,所有记录器的父辈# 指定根日志的级别rootlogger.level=info# 指定输出的appender引用rootlogger.appenderref.stdout.ref=stdoutrootlogger.appenderref.rolling.ref=inforollingfile # console# 指定输出源的类型与名称appender.console.type=consoleappender.console.name=stdoutappender.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 fileappender.rolling.type=rollingfileappender.rolling.name=inforollingfileappender.rolling.filename=${filepath}# 指定当发生rolling时,文件的转移和重命名规则appender.rolling.filepattern=${filedir}/${filename}_%d{yyyy-mm-dd}_%i.logappender.rolling.layout.type=patternlayoutappender.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=timebadtriggeringpolicy# 当前记录周期为每1h生成一个文件appender.rolling.policies.time.interval=1appender.rolling.policies.time.modulate=true# 基于日志文件体积的触发策略appender.rolling.policies.size.type=sizebadtriggeringpolicy# 当日志文件体积大于size指定学前拼音的值时,触发rollingappender.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}
原工作组比较清闲,被临时借调到新的工作组。组长给了个任务是把log4j的xml配置文件改成properties,原因是xml格式的看着不舒服。哈,以上不算吐槽,只是交待一下,为什么我要这么费劲的使用properties做配置文件。
log4j2 一开始抛弃了properties配置文件格式,到2.4版本时,又开始支持properties配置文件格式。到2.6版本又有新的要求。我用的是写本文时的最近版本2.8
status = errorproperty.log_home=/output/logsproperty.backup_home=backupproperty.rver_name=buddie-rviceproperty.every_file_size=10mproperty.output_log_level=infoproperty.file_max=10appender.console.type = consoleappender.console.name = stdoutappender.console.layout.type = patternlayoutappender.console.layout.pattern = %m%nappender.rolling.type=rollingfileappender.rolling.name=rollingfileallappender.rolling.filter.threshold.level = traceappender.rolling.filter.threshold.type = thresholdfilterappender.rolling.filename=${log_home}/dev_${rver_name}_all.logappender.rolling.filepattern=${log_home}/dev_${backup_home}/dev_${rver_name}_all.%d{yyyy-mm-dd-hh}.logappender.rolling.layout.type=patternlayoutappender.rolling.layout.pattern=%d %p %c{1.} [%t] %m%nappender.rolling.policies.type=policiesappende搞笑短信r.rolling.policies.time.type=timebadtriggeringpolicyappender.rolling.policies.time.interval=2appender.rolling.policies.time.modulate=trueappender.rolling.policies.size.type=sizebadtriggeringpolicyappender.rolling.policies.size.size=${every_file_size}appender.rolling.strategy.type=defaultrolloverstrategyappender.error.type=rollingfileappender.error.name=rollingfileerrorappender.error.filter.threshold.level = errorappender.error.filter.threshold.type = thresholdfilterappender.error.filename=${log_home}/dev_${rver_name}_error.logappender.error.filepattern=${log_home}/dev_${backup_home}/dev_${rver_name}_error.%d{yyyy-mm-dd-hh}.logappender.error.layout.type=patternlayoutappender.error.layout.pattern=%d %p %c{1.} [%t] %m%nappender.error.policies.type=policiesappender.error.policies.time.type=timebadtriggeringpolicyappender.error.policies.time.interval=2appender.erro国旗下的讲话演讲稿r.policies.time.modulate=trueappender.error.policies.size.type=sizebadtriggeringpolicyappender.error.policies.size.size=${every_file_size}appender.error.strategy.type=defaultrolloverstrategyappender.charge.type=rollingfileappender.charge.name=rollingfilechargeappender.charge.filter.threshold.level = traceappender.charge.filter.threshold.type = thresholdfilterappender.charge.filename=${log_home}/dev_${rver_name}_charge.logappender.charge.filepattern=${log_home}/dev_${backup_home}/dev_${rver_name}_charge.%d{yyyy-mm-dd-hh}.logappender.charge.layout.type=patternlayoutappender.charge.layout.pattern=%d %p %c{1.} [%t] %m%nappender.charge.policies.type=policiesappender.charge.policies.time.type=timebadtriggeringpo如何用卷发棒licyappender.charge.policies.time.interval=2appender.charge.policies.time.modulate=trueappender.charge.policies.size.type=sizebadtriggeringpolicyappender.charge.policies.size.size=${every_file_size}appender.charge.strategy.type=defaultrolloverstrategylogger.activity.name = buddie.activitylogger.activity.level = debuglogger.activity.additivity = fallogger.activity.appenderref.all.ref = rollingfilealllogger.activity.appenderref.error.ref = rollingfileerrorlogger.activity.appenderref.stdout.ref = stdoutlogger.login.name = buddie.loginlogger.login.level = debuglogger.login.additivity = fallogger.login.appenderref.all.ref = rollingfilealllogger.login.appenderref.error.ref = rollingfileerrorlogger.login.appenderref.stdout.ref = stdoutlogger.charge.name = buddie.chargelogger.charge.level = tracelogger.charge.additivity = fallogger.charge.appenderref.all.ref = rollingfilealllogger.charge.appenderref.error.ref = rollingfileerrorlogger.charge.appenderref.charge.ref = rollingfilechargelogger.charge.appenderref.stdout.ref = stdoutrootlogger.level = inforootlogger.appenderref.stdout.ref = stdoutrootlogger.appenderref.all.ref = rollingfileallrootlogger.appenderref.error.ref = rollingfileerror
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-04 05:18:43,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/2b0865586404d4962a524f161051d048.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:基于log4j2.properties踩坑与填坑.doc
本文 PDF 下载地址:基于log4j2.properties踩坑与填坑.pdf
留言与评论(共有 0 条评论) |