`

springboot 使用 log4j2

 
阅读更多

<audio class="audio-for-speech" src="/admin/blogs/2508494/"></audio>

 

 

排除默认的日志添加log4j2的依赖

 

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-web</artifactId>  
    <exclusions><!-- 去掉springboot默认配置 -->  
        <exclusion>  
            <groupId>org.springframework.boot</groupId>  
            <artifactId>spring-boot-starter-logging</artifactId>  
        </exclusion>  
    </exclusions>  
</dependency> 

<dependency> <!-- 引入log4j2依赖 -->  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-log4j2</artifactId>  
</dependency> 
 

 

 如果自定义了文件名,需要在application.yml中配置

logging:
  config:  xxxx.xml

默认名log4j2-spring.xml,就省下了在application.yml中配置

 

 

配置模板

<?xml version="1.0" encoding="UTF-8"?>
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration monitorInterval="5" status="trace">
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
    <!--变量配置-->
<Properties>
        <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
        <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
<property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} 【%thread】 %-5level 【%logger{36}】 - %msg%n"/>
        <!-- 定义日志存储的路径 -->
<property name="FILE_PATH" value="E:\\logs\\test"/>
        <property name="FILE_NAME" value="springboot-test"/>
    </Properties>

    <appenders>

        <console name="Console" target="SYSTEM_OUT">
            <!--输出日志的格式-->
<PatternLayout pattern="${LOG_PATTERN}"/>
            <!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
        </console>

        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
<File name="Filelog" fileName="${FILE_PATH}/test.log" append="false">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </File>

        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="${FILE_PATH}/info.log"
filePattern="${FILE_PATH}/${FILE_NAME}-INFO-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileWarn" fileName="${FILE_PATH}/warn.log"
filePattern="${FILE_PATH}/${FILE_NAME}-WARN-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
        </RollingFile>

        <!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileError" fileName="${FILE_PATH}/error.log"
filePattern="${FILE_PATH}/${FILE_NAME}-ERROR-%d{yyyy-MM-dd}_%i.log.gz">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="${LOG_PATTERN}"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1 hour-->
<TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖-->
<DefaultRolloverStrategy max="15"/>
        </RollingFile>

    </appenders>

    <!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。-->
    <!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效-->
<loggers>

        <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.mybatis" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </logger>
        <!--监控系统信息-->
        <!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。-->
<Logger name="org.springframework" level="info" additivity="false">
            <AppenderRef ref="Console"/>
        </Logger>

        <root level="info">
            <appender-ref ref="Console"/>
            <appender-ref ref="Filelog"/>
            <appender-ref ref="RollingFileInfo"/>
            <appender-ref ref="RollingFileWarn"/>
            <appender-ref ref="RollingFileError"/>
        </root>
    </loggers>

</configuration>

 

 

以上方式输出的方式是 PatternLayout 

如果想输出的日志为json 格式,可以使用JsonLayout

<JsonLayout compact="true" locationInfo="true" complete="false" eventEol="true" pattern="${LOG_PATTERN}"/>

 

输出的结果如下

{"instant":{"epochSecond":1601168050,"nanoOfSecond":335000000},"thread":"http-nio-8080-exec-1","level":"INFO","loggerName":"org.springframework.web.servlet.DispatcherServlet","message":"Completed initialization in 17 ms","endOfBatch":false,"loggerFqcn":"org.apache.commons.logging.LogAdapter$Log4jLog","threadId":170,"threadPriority":5,"source":{"method":"initServletBean","file":"FrameworkServlet.java","line":547,"class":"org.springframework.web.servlet.FrameworkServlet"}}
{"instant":{"epochSecond":1601168050,"nanoOfSecond":418000000},"thread":"http-nio-8080-exec-1","level":"INFO","loggerName":"com.example.springboottest.test.TestController","message":"controller request come in http-nio-8080-exec-1","endOfBatch":false,"loggerFqcn":"org.apache.logging.slf4j.Log4jLogger","threadId":170,"threadPriority":5,"source":{"method":"sayHello","file":"TestController.java","line":27,"class":"com.example.springboottest.test.TestController"}}
{"instant":{"epochSecond":1601168050,"nanoOfSecond":418000000},"thread":"http-nio-8080-exec-1","level":"INFO","loggerName":"com.example.springboottest.test.service.impl.TestServiceImpl","message":"service request come in http-nio-8080-exec-1","endOfBatch":false,"loggerFqcn":"org.apache.logging.slf4j.Log4jLogger","threadId":170,"threadPriority":5,"source":{"method":"doTestService","file":"TestServiceImpl.java","line":14,"class":"com.example.springboottest.test.service.impl.TestServiceImpl"}}
{"instant":{"epochSecond":1601168050,"nanoOfSecond":419000000},"thread":"http-nio-8080-exec-1","level":"INFO","loggerName":"com.example.springboottest.test.service.impl.TestServiceImpl","message":"service inner request come in http-nio-8080-exec-1","endOfBatch":false,"loggerFqcn":"org.apache.logging.slf4j.Log4jLogger","threadId":170,"threadPriority":5,"source":{"method":"doTestServiceInner","file":"TestServiceImpl.java","line":20,"class":"com.example.springboottest.test.service.impl.TestServiceImpl"}}

 

 

 

 

======================================我是分割线===================================

======================================我是分割线===================================

======================================我是分割线===================================

======================================我是分割线===================================

 

 

 

 

 

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error" monitorInterval="60">
    <Properties>
        <Property name="P_Layout" value="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c][%-5p][%traceId]%m%n"/>
        <Property name="TriggerSize" value="100MB"/>
        <Property name="imFlush" value="true"/>
    </Properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c][%-5p][%traceId]%m%n"/>
        </Console>
        <RollingRandomAccessFile name="thirdpartylog" immediateFlush="${imFlush}" fileName="/home/logs/log/!xxx!-thirdparty.log" filePattern="/home/logs/log/!xxx!-thirdparty.log_%d{yyyyMMddHHmmss}">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c][%-5p][%traceId]%m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="${TriggerSize}"/>
                <CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>
            </Policies>
            <Filters>
            </Filters>
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="locallog" immediateFlush="${imFlush}" fileName="/home/logs/log/!xxx!-local.log" filePattern="/home/logs/log/!xxx!-local.log_%d{yyyyMMddHHmmss}">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c][%-5p][%traceId]%m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="${TriggerSize}"/>
                <CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>
            </Policies>
            <Filters>
            </Filters>
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="alarmlog" immediateFlush="${imFlush}" fileName="/home/logs/log/!xxx!-alarm.log" filePattern="/home/logs/log/!xxx!-alarm.log_%d{yyyyMMddHHmmss}">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c][%-5p][%traceId]%m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="${TriggerSize}"/>
                <CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>
            </Policies>
            <Filters>
            </Filters>
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="servicelog" immediateFlush="${imFlush}" fileName="/home/logs/log/!xxx!-service.log" filePattern="/home/logs/log/!xxx!-service.log_%d{yyyyMMddHHmmss}">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c][%-5p][%traceId]%m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="${TriggerSize}"/>
                <CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>
            </Policies>
            <Filters>
            </Filters>
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="securitylog" immediateFlush="${imFlush}" fileName="/home/logs/log/!xxx!-security.log" filePattern="/home/logs/log/!xxx!-security.log_%d{yyyyMMddHHmmss}">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c][%-5p][%traceId]%m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="${TriggerSize}"/>
                <CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>
            </Policies>
            <Filters>
            </Filters>
        </RollingRandomAccessFile>
        <RollingRandomAccessFile name="batchlog" immediateFlush="${imFlush}" fileName="/home/logs/log/!xxx!-batch.log" filePattern="/home/logs/log/!xxx!-batch.log_%d{yyyyMMddHHmmss}">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss,SSS}][%c][%-5p][%traceId]%m%n"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="${TriggerSize}"/>
                <CronTriggeringPolicy schedule="0 0 0 * * ?" evaluateOnStartup="true"/>
            </Policies>
            <Filters>
            </Filters>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="redislog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="locallog"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="pushlog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="locallog"/>
        </Logger>
        <Logger name="mongolog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="locallog"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="opslog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="locallog"/>
        </Logger>
        <Logger name="mqlog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="locallog"/>
        </Logger>
        <Logger name="configlog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="locallog"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="infolog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="locallog"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="locallog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="locallog"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="alarmlog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="alarmlog"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="servicelog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="servicelog"/>
            <AppenderRef ref="Console"/>
        </Logger>
        <Logger name="securitylog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="securitylog"/>
        </Logger>
        <Logger name="batchlog" level="info" includeLocation="true" additivity="false">
            <AppenderRef ref="batchlog"/>
        </Logger>
        <Root level="ERROR" includeLocation="true">
            <AppenderRef ref="thirdpartylog"/>
        </Root>
    </Loggers>
</Configuration>

 

 

 

 

 

 

分享到:
评论

相关推荐

    SpringBoot框架配置log4j和log4j2的配置代码

    Log4j和Log4j2是两种广泛使用的Java日志框架,它们提供了灵活的日志配置和高性能的日志处理能力。本文将详细介绍如何在SpringBoot项目中配置Log4j和Log4j2。 ### SpringBoot与Log4j Log4j是Apache的一个开源项目,...

    springboot_log4j2下载

    spring boot 集成log4j2工程,多环境下使用不同的log4j2配置文件。 对应的博客地址:http://blog.csdn.net/woniu211111/article/details/54347846

    springboot-log4j.zip

    总结一下,"springboot-log4j.zip"包含的是一个展示了如何在Spring Boot应用中使用Log4j进行日志记录的示例。通过引入Log4j依赖,配置日志输出格式和级别,以及在代码中使用`Logger`接口,我们可以实现高效且易于...

    Springboot整合log4j2日志全解总结

    Springboot 整合 log4j2 日志全解总结 本文主要介绍了 Springboot 整合 log4j2 日志的实现 шаги,旨在帮助开发者更好地理解日志框架在 Springboot 项目中的应用。 日志框架的重要性 在项目推进中,日志框架的...

    springboot+mybatis+log4j2

    在项目中,我们需要修改Spring Boot的默认配置,指定使用Log4j2,并在项目的配置文件中(如`log4j2.xml`或`log4j2.json`)定义日志级别、输出格式和目标位置。 在项目中,"springBootMybatis"这个压缩包文件可能...

    SpringBoot整合log4j223

    2. **配置Log4j2**: Spring Boot默认的日志系统是Logback,因此我们需要自定义配置以使用Log4j2。在`src/main/resources`目录下创建一个名为`log4j2.xml`或`log4j2.json`的配置文件,例如: ```xml [%t] %-5...

    springboot整合log4j入门程序

    源码说明:- SpringBoot只有1.3和1.3.x以下版本才支持log4j,1.3.x以上版本只支持log4j2(对于log4j来说很多变动)- 引入log4j之后,Springboot推荐优先使用带有-spring的文件名作为日志配置(eg: log4j-spring....

    SpringBoot2.X整合Mybatis代码示例2-使用配置文件方式+Log4j

    本文将深入探讨如何在SpringBoot 2.x版本中整合Mybatis,并利用Log4j进行日志记录。 首先,让我们了解SpringBoot与Mybatis整合的基本步骤: 1. **添加依赖**:在`pom.xml`文件中,我们需要引入Spring Boot的...

    SpringBoot整合log4j

    - **添加依赖**:首先,需要在`pom.xml`文件中引入Log4j的依赖,通常会使用Log4j2,因为它比Log4j1.x更强大,功能更丰富。 ```xml &lt;groupId&gt;org.springframework.boot &lt;artifactId&gt;spring-boot-starter-log4j2...

    第3章SpringBoot整合Log4j2

    第3章SpringBoot整合Log4j2

    SpringBoot中使用log4j进行日志管理示例源码

    Log4j是一个广泛使用的Java日志框架,提供了灵活的日志配置和丰富的日志输出功能。本示例源码将展示如何在Spring Boot项目中集成和使用Log4j进行日志管理。 首先,我们需要在Spring Boot项目的`pom.xml`文件中添加...

    log4j2.xml

    使用log4j2.xml实现对日志的精准控制,对整个开发过程百利有之!但是也要也要注意使用的误区,具体可才看本博客下的Java异常和日志管理!

    springboot_log4j2_flume

    Log4j直接发送数据到Flume + Kafka (方式一) 通过flume收集系统日记, 收集的方式通常采用以下. 系统logs直接发送给flume系统, 本文主要记录种方式进行说明. 文章链接,请看:...

    SpringBoot使用Log4j过程详解

    在 SpringBoot 项目中使用 Log4j 需要导入相应的 jar 包,需要排除 Spring 自带的日志依赖,使用 Log4j2 需要导入 spring-boot-starter-log4j2 依赖,而使用 Log4j 则需要导入 spring-boot-starter-log4j 依赖。...

    Springboot项目使用Slf4j将日志保存到本地目录的实现代码

    Springboot 项目使用 Slf4j 将日志保存到本地目录的实现代码 Slf4j 是一个 Java 日志记录门面,它提供了一个通用的日志记录API,允许开发者使用不同的日志记录框架,例如 Logback、Log4j 等。在 Springboot 项目中...

    SpringBoot第 3 讲:SpringBoot+Junit+Log4J

    SpringBoot简化了Java应用的开发流程,而JUnit是广泛使用的单元测试工具,Log4J则是一款强大的日志记录框架。让我们一起了解如何在实际开发中有效地利用这些技术。 1. **SpringBoot简介**: SpringBoot是由Pivotal...

    SpringBoot使用Log4j的知识点整理

    本文对 SpringBoot 使用 Log4j 的知识点进行了整理,包括 Log4j、Logback、Log4j2 的简介、SLF4J 的简介、使用 SLF4J + Log4j、使用 Log4j、在 SpringBoot 项目中使用 Log4j 等内容,希望对读者有所帮助。

    springboot2-log4j2-demo:springboot2+log4j2简单demo

    springboot2+log4j2简单demo,以后开发,需要用到哪种配置,或者需要集成log,直接使用demo的代码就可以了。 而且本demo对新手友好,简单的配置不会删除。也同时保有略复杂的配置 ##v1.0 因为springboot2的log4j2自动...

    IDEA下springboot+mybatis+log4j

    【标题】"IDEA下springboot+mybatis+log4j"所涉及的知识点主要集中在Java开发环境的集成、Spring Boot框架的应用、MyBatis持久层框架的使用以及日志管理工具Log4j和SLF4J的配置与实践。 首先,IntelliJ IDEA(简称...

    Spring boot下log4j2的YML方式配置log

    自用的log配置文件,比较详细,喜欢的可以拿去,借用了一些人的配置

Global site tag (gtag.js) - Google Analytics