iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >基于log4j2.properties踩坑与填坑的示例分析
  • 388
分享到

基于log4j2.properties踩坑与填坑的示例分析

2023-06-22 05:06:24 388人浏览 安东尼
摘要

这篇文章主要介绍基于log4j2.properties踩坑与填坑的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!log4j2.properties踩坑与填坑日志配置门面模式:slf4j日志库:log4j2引入

这篇文章主要介绍基于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=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=TimeBasedTriggeringPolicy# 当前记录周期为每1h生成一个文件appender.rolling.policies.time.interval=1appender.rolling.policies.time.modulate=true# 基于日志文件体积的触发策略appender.rolling.policies.size.type=SizeBasedTriggeringPolicy# 当日志文件体积大于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}

Log4j2 properties配置文件

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

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

status = errorproperty.LOG_HOME=/output/logsproperty.BACKUP_HOME=backupproperty.SERVER_NAME=buddie-Serviceproperty.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_${SERVER_NAME}_all.logappender.rolling.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_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=Policiesappender.rolling.policies.time.type=TimeBasedTriggeringPolicyappender.rolling.policies.time.interval=2appender.rolling.policies.time.modulate=trueappender.rolling.policies.size.type=SizeBasedTriggeringPolicyappender.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_${SERVER_NAME}_error.logappender.error.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_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=TimeBasedTriggeringPolicyappender.error.policies.time.interval=2appender.error.policies.time.modulate=trueappender.error.policies.size.type=SizeBasedTriggeringPolicyappender.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_${SERVER_NAME}_charge.logappender.charge.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_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=TimeBasedTriggeringPolicyappender.charge.policies.time.interval=2appender.charge.policies.time.modulate=trueappender.charge.policies.size.type=SizeBasedTriggeringPolicyappender.charge.policies.size.size=${EVERY_FILE_SIZE}appender.charge.strategy.type=DefaultRolloverStrategylogger.activity.name = buddie.activitylogger.activity.level = debuglogger.activity.additivity = falselogger.activity.appenderRef.all.ref = RollingFileAlllogger.activity.appenderRef.error.ref = RollingFileErrorlogger.activity.appenderRef.stdout.ref = STDOUTlogger.login.name = buddie.loginlogger.login.level = debuglogger.login.additivity = falselogger.login.appenderRef.all.ref = RollingFileAlllogger.login.appenderRef.error.ref = RollingFileErrorlogger.login.appenderRef.stdout.ref = STDOUTlogger.charge.name = buddie.chargelogger.charge.level = tracelogger.charge.additivity = falselogger.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

以上是“基于log4j2.properties踩坑与填坑的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: 基于log4j2.properties踩坑与填坑的示例分析

本文链接: https://www.lsjlt.com/news/302660.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 基于log4j2.properties踩坑与填坑的示例分析
    这篇文章主要介绍基于log4j2.properties踩坑与填坑的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!log4j2.properties踩坑与填坑日志配置门面模式:slf4j日志库:log4j2引入...
    99+
    2023-06-22
  • 基于log4j2.properties踩坑与填坑
    目录log4j2.properties踩坑与填坑日志配置采坑格式化日志输出参数记录一份自己的配置文件Log4j2 properties配置文件log4j2.properties踩坑与...
    99+
    2024-04-02
  • Python 3.x踩坑的示例分析
    这篇文章主要为大家展示了“Python 3.x踩坑的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python 3.x踩坑的示例分析”这篇文章吧。处处有坑1. 文件读...
    99+
    2023-06-29
  • vue2使用swiper4踩坑的示例分析
    vue2使用swiper4踩坑的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。前言一开始打算采用最新的swiper7,后来好像是vue2兼容性问题,各种报错,所以从...
    99+
    2023-06-26
  • SpringMVC配置404踩坑的示例分析
    这篇文章给大家分享的是有关SpringMVC配置404踩坑的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。错误错误就是一直报404,也就说找不到路径。怎么试路径还是404。我相信大家也是非常讨厌404的吧...
    99+
    2023-06-29
  • Next.js项目实战踩坑的示例分析
    这篇文章主要介绍Next.js项目实战踩坑的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言github: https://github.com/code-coder/ne...
    99+
    2024-04-02
  • 基于spring data jpa@query返回map的踩坑分析
    这篇文章主要介绍“基于spring data jpa@query返回map的踩坑分析”,在日常操作中,相信很多人在基于spring data jpa@query返回map的踩坑分析问题上存在疑惑,小编...
    99+
    2023-06-25
  • Vue微信公众号开发踩坑的示例分析
    这篇文章将为大家详细讲解有关Vue微信公众号开发踩坑的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。需求微信授权登录(基于公众号的登录方案)接入JS-SDK实现图...
    99+
    2024-04-02
  • Oracle12c中图形化&静默安装踩坑的示例分析
    这篇文章将为大家详细讲解有关Oracle12c中图形化&静默安装踩坑的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1 安装规划ORACLE安装到新磁盘上...
    99+
    2024-04-02
  • Flutter中关于angle的坑实例分析
    这篇“Flutter中关于angle的坑实例分析”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Flutter中关于angle...
    99+
    2023-07-02
  • Canvas跨域脱坑的示例分析
    小编给大家分享一下Canvas跨域脱坑的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!先来看下实现方法。实现方法目标图片一般是由 图片 + 文本 构成。无...
    99+
    2023-06-09
  • Linux高并发踩过的坑及性能实例分析
    这篇文章主要讲解了“Linux高并发踩过的坑及性能实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux高并发踩过的坑及性能实例分析”吧!前言Linux操作系统是现在服务器的首选操...
    99+
    2023-06-22
  • 基于require.js的示例分析
    这篇文章将为大家详细讲解有关基于require.js的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.为什么使用require.js使用之前,我的页面的js是这...
    99+
    2024-04-02
  • 分享一个mongodb和golang搭伙采坑的示例分析
    这篇文章主要介绍了分享一个mongodb和golang搭伙采坑的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。什么是golanggolang 是Google开发的一种...
    99+
    2023-06-14
  • 基于原生ajax与封装ajax的示例分析
    这篇文章将为大家详细讲解有关基于原生ajax与封装ajax的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。当我们不会写后端接口来测试ajax时,我们可以使用nod...
    99+
    2024-04-02
  • 基于JSONP原理的示例分析
    这篇文章主要介绍了基于JSONP原理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言我工作以来接触的第一个项目就是前后端分离的,...
    99+
    2024-04-02
  • 基于Oracle闪回的示例分析
    小编给大家分享一下基于Oracle闪回的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Oracle 9i 开始支持闪回,...
    99+
    2024-04-02
  • 基于Spark Mllib文本分类的示例分析
    这篇文章将为大家详细讲解有关基于Spark Mllib文本分类的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。基于Spark Mllib的文本分类文本分类是一个典型的机器学习问题,其主要目标是通过...
    99+
    2023-06-19
  • 基于vue.js路由参数的示例分析
    这篇文章主要介绍了基于vue.js路由参数的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。vue中,我们构建单页面应用时候,一定必不...
    99+
    2024-04-02
  • 基于Java中Scoket编程的示例分析
    这篇文章主要为大家展示了“基于Java中Scoket编程的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“基于Java中Scoket编程的示例分析”这篇文章吧。一,网络编程中两个主要的问题...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作