当前位置: 首页 > article >正文

springboot整合log4j2案例以及异常输出格式案例2

目录

一   springboot项目

1.1 springboot项目使用logback默认日志

二  springboot项目集成log4j2

2.1 引入依赖

2.2 排除依赖

2.3添加log4j2配置文件

2.4 在application配置文件中添加log4j2配置文件

 2.5 异步配置

2.6 启动验证

三  配置异常格式案例

3.1 异常格式参考

3.2  异常案例

3.2.1 默认不设置异常格式

3.2.2 场景1:%throwable

3.2.3 场景2*:%throwable{short}

3.2.4 场景3:%throwable{short.className}

3.2.5 场景4:%throwable{short.fileName}

3.2.6 场景5:%throwable{short.methodName}

3.2.7场景6:%throwable{short.lineNumber}

3.2.8场景7*:%throwable{short.messae}

3.2.9场景8:%throwable{short.messae}

3.2.10场景9*:%throwable{n}

3.2.11场景10:%throwable{separator( --> )}

3.3结论


一   springboot项目

1.1 springboot项目使用logback默认日志

1.项目启动后,打印日志

二  springboot项目集成log4j2

2.1 引入依赖

<!--log4j2-->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2.2 排除依赖

springboot默认使用Logback日志框架来记录日志,并用INFO级别输出到控制台,所以我们要先排除它的依赖

<!--spring boot的启动类 -->
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-logging</artifactId>
    </exclusion>
  </exclusions>
</dependency>

2.3添加log4j2配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<!--  %d{HH:mm:ss.SSS}  毫秒的时间
       %p代表输出该条日志的等级
       %t  当前线程名称
       %-5level  日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
       %c{1}  类名
       %L 输出行号
       %msg 日志文本
       %n 换行
  其他常用的占位符有:
       %F 输出所在的类文件名,如Client.java
       %M 输出所在方法名
       %m是输出代码指定的日志信息
       %l  输出语句所在的行数, 包括类名、方法名、文件名、行数 (这个比较强大)  -->
<configuration status="WARN" monitorInterval="30">
    <!--先定义所有的appender-->
    <appenders>
        <!--这个输出控制台的配置-->
        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
            <PatternLayout pattern="%clr{[%d{HH:mm:ss:SSS}]}{green} [%p] [%t] - %c{5} - %m%clr{%throwable{short.methodName}}{red}%n"/>
            <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>


<!--        <PatternLayout pattern="%clr{[%d{HH:mm:ss:SSS}]}{green} [%p] [%t] - %l- %m%clr{%throwable}{red}%n"/>-->
<!--      <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %style{%L}{red} %M - %msg%style{%throwable}{red}%n"  disableAnsi="false" noConsoleNoAnsi="false"/>-->
        </console>
        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
        <File name="log" fileName="E:/log4j2/test.log" append="false">
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] [%t] - %l - %m%n"/>
        </File>

        <!--INFO日志文件输出 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <RollingFile name="RollingFileInfo" fileName="E:/log4j2/info.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
        </RollingFile>
        <!-- Warn日志文件输出 -->
        <RollingFile name="RollingFileWarn" fileName="E:/log4j2/warn.log"
                     filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
        <!-- Error日志文件输出 -->
        <!--<RollingFile name="RollingFileError" fileName="E:/logs/error.log"-->
        <!--filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">-->
        <!--<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>-->
        <!--<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>-->
        <!--<Policies>-->
        <!--<TimeBasedTriggeringPolicy/>-->
        <!--<SizeBasedTriggeringPolicy size="100 MB"/>-->
        <!--</Policies>-->
        <!--</RollingFile>-->
    </appenders>

    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
    <loggers>
        <!--节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等-->
        <!--<logger name="org.springframework" level="INFO"></logger>-->
        <!--<logger name="org.mybatis" level="INFO"></logger>-->
<!--        <root level="INFO">-->
<!--            <appender-ref ref="Console"/>-->
<!--            <appender-ref ref="log"/>-->
<!--            <appender-ref ref="RollingFileInfo"/>-->
<!--            <appender-ref ref="RollingFileWarn"/>-->
<!--            &lt;!&ndash;<appender-ref ref="RollingFileError"/>&ndash;&gt;-->
<!--        </root>-->
        <AsyncRoot level="INFO"  includeLocation="true" >
            <AppenderRef ref="Console"/>
        </AsyncRoot>
    </loggers>
</configuration>

2.4 在application配置文件中添加log4j2配置文件

需要在application.properties文件中添加配置 

 2.5 异步配置

1.添加依赖

<dependency>
  <groupId>com.lmax</groupId>
  <artifactId>disruptor</artifactId>
  <version>3.4.4</version>
</dependency>

2.配置:新增一个log4j2_component.properties文件,配置内容如下:

 log4j2.contextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

2.6 启动验证

springboot 集成Log4j2_springboot集成log4j2-CSDN博客

https://www.zhihu.com/tardis/bd/art/244943401?source_id=1001

SpringBoot整合Log4j2日志框架 - Evan1024 - 博客园

springboot集成log4j2日志 - theSummerDay - 博客园

https://mp.weixin.qq.com/s/sLo_yMwTxzp52TLBKtdkqA

1.控制台输出

2.不同文件输出

3.输出语句: 使用门面层slf4j

三  配置异常格式案例

3.1 异常格式参考

Pattern Layout :: Apache Log4j

https://blog.csdn.net/wb1046329430/article/details/119222123

3.2  异常案例

3.2.1 默认不设置异常格式

1.正常所打印异常日志

1.针对错误日志输出,没有指定输出格式:输出完整的堆栈信息

3.2.2 场景1:%throwable

默认情况下,这将输出完整的跟踪,就像调用Throwable.printstacktrace()一样。

3.2.3 场景2*:%throwable{short}

输出 Throwable 的第一行。

3.2.4 场景3:%throwable{short.className}

输出发生异常的类的名称

3.2.5 场景4:%throwable{short.fileName}

输出发生异常的类的名称

3.2.6 场景5:%throwable{short.methodName}

输出发生异常的方法名。

3.2.7场景6:%throwable{short.lineNumber}

输出发生异常的行号。

3.2.8场景7*:%throwable{short.messae}

输出消息

3.2.9场景8:%throwable{short.messae}

输出本地化消息。

3.2.10场景9*:%throwable{n}

指定输出行数。指定%throwable{none}或%throwable{0}将抑制异常的输出

3.2.11场景10:%throwable{separator( --> )}

3.3结论

1.ex|exception|throwable: 输出完整的异常堆栈,输出格式和Throwable.printStackTrace()相同

2.xEx|xException|xThrowable: 除了输出ex|exception|throwable的信息外,还输出类所在的包信息,例如类所在目录的jar包名称

未配置异常输出格式时默认输出格式为xEx|xException|xThrowable。即默认会通过类加载获取异常堆栈中每个类的包名和版本号。

3.解决办法:

修改log4j的日志配置,强制指定每个日志文件的异常堆栈格式为ex|exception|throwable,修改如下:

%m%clr{%throwable}{short}{red}%n

%m%clr{%throwable}{n}{red}%n

%m%clr{%throwable}{short.message}{red}%n


http://www.kler.cn/a/456244.html

相关文章:

  • VSCode 插件开发实战(十五):如何支持多语言
  • WebRTC Simulcast 大小流介绍与优化实践
  • 华诺星空 Java 开发工程师笔试题 - 解析
  • 浏览器http缓存问题
  • AI发展新态势:从技术突破到安全隐忧
  • 第P4周:猴痘病识别
  • RAGFlow 基于深度文档理解构建的开源 RAG引擎 - 使用Ollama添加大模型
  • Springboot配置嵌入式服务器
  • vue Promise使用
  • 什么是缓存穿透、缓存击穿、缓存雪崩,在项目中是如何解决和预防?它们分别会带来什么危害?
  • MyBatis知识点笔记
  • 【Websocket和nginx配置】
  • 实验五 时序逻辑电路部件实验
  • 如何在idea中搭建SpringBoot项目
  • 使用 Docker 搭建 Hadoop 集群
  • Day52 图论part03
  • llm知识梳理
  • Github 2024-12-28 Rust开源项目日报 Top10
  • AIGC在电影与影视制作中的应用:提高创作效率与创意的无限可能
  • 简单园区网拓扑实验
  • Android OpenGl(二) Shader
  • 基于C#了解垃圾回收机制
  • Faster R-CNN
  • 【intellij idea 创建springBoot 搭配mybatis oracle】
  • C# 简单使用NModbus
  • 5.系统学习-PyTorch与多层感知机