赞
踩
<!-- 引入log4j2的springboot依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
<version>${spring.boot.version}</version>
</dependency>
由于springboot默认使用的是logback日志框架,故需要在spring-boot-starter-web
和spring-boot-starter
中去除spring-boot-starter-logging
依赖,具体如下:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>${spring.boot.version}</version> <exclusions><!-- 去掉springboot默认配置 --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>${spring.boot.version}</version> <exclusions><!-- 去掉springboot默认配置 --> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency>
在resource目录下,新增log4j2.xml文件,该xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Properties> <!-- 声明日志文件存储的根目录,这里通过读取配置文件中的配置获取 --> <Property name="LOG_HOME" value="${spring:logging.home.path}"/> <!-- 声明应用名称,通过读取配置文件中的配置获取 --> <Property name="APP_NAME" value="${spring:spring.application.name}"/> <!-- 声明日志格式:时间 + 日志级别 + 线程名 + 类名 + 日志信息 + 换行 --> <Property name="LOG_PATTERN" value="%date{yyyy-MM-dd HH:mm:ss} %-5level [%thread][%class{36}:%line] - %msg%n"/> </Properties> <Appenders> <!--输出控制台的配置--> <Console name="STDOUT-APPENDER" target="SYSTEM_OUT"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/> <!-- 输出日志的格式,编码格式--> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> </Console> <Console name="STDERR-APPENDER" target="SYSTEM_OUT"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <!-- 输出日志的格式,编码格式--> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> </Console> <!-- ERROR级别日志,只打印error fileName 指定当前日志文件的位置和文件名称 filePattern 指定当发生Rolling时,文件的转移和重命名规则 --> <RollingFile name="ERROR-APPENDER" fileName="${LOG_HOME}/${APP_NAME}/common-error.log" filePattern="${LOG_HOME}/${APP_NAME}/common.error.log.%d{yyyy-MM-dd}"> <!-- 表示打印error级别以上的,该ThresholdFilter的操作表示对info级别以上的同意打印,不匹配的拒绝打印 --> <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/> <!-- 输出日志的格式,编码格式--> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> <!--TimeBasedTriggeringPolicy 这个配置需要和filePattern结合使用 注意filePattern中配置的文件重命名规则是${LOG_HOME}/${APP_NAME}/common.error.log.%d{yyyy-MM-dd},最小的时间粒度是天。 TimeBasedTriggeringPolicy指定的size是1,结合起来就是每1天生成一个新文件。 如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件。 --> <TimeBasedTriggeringPolicy/> <!-- 最大文件里只能保存3个 --> <DefaultRolloverStrategy max="3"/> </RollingFile> <!-- App 默认日志 --> <RollingFile name="APP-DEFAULT-APPENDER" fileName="${LOG_HOME}/${APP_NAME}/app-default.log" filePattern="${LOG_HOME}/${APP_NAME}/common.error.log.%d{yyyy-MM-dd}"> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> <TimeBasedTriggeringPolicy/> <DefaultRolloverStrategy max="3"/> </RollingFile> <!-- SpringBoot启动日志 --> <RollingFile name="SPRING-APPENDER" fileName="${LOG_HOME}/spring/spring.log" filePattern="${LOG_HOME}/spring/spring.log.%d{yyyy-MM-dd}" append="true"> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> <TimeBasedTriggeringPolicy/> <DefaultRolloverStrategy max="3"/> </RollingFile> <!-- gmall-common日志 --> <RollingFile name="GMALL-COMMON-APPENDER" fileName="${LOG_HOME}/${APP_NAME}/gmail-common.log" filePattern="${LOG_HOME}/${APP_NAME}/gmail-common.log.%d{yyyy-MM-dd}" append="true"> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="3GB"/> </Policies> <DefaultRolloverStrategy max="1"> <!-- 设置当前文件大于5GB则删除该文件 --> <Delete basePath="${LOG_HOME}/${APP_NAME}"> <IfFileName glob="gmail-common.log.*"/> <IfAccumulatedFileSize exceeds="5GB" /> </Delete> </DefaultRolloverStrategy> </RollingFile> <!-- gmall-dal日志 --> <RollingFile name="GMALL-DAL-APPENDER" fileName="${LOG_HOME}/${APP_NAME}/gmail-dal.log" filePattern="${LOG_HOME}/${APP_NAME}/gmail-dal.log.%d{yyyy-MM-dd}" append="true"> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="3GB"/> </Policies> <DefaultRolloverStrategy max="1"> <Delete basePath="${LOG_HOME}/${APP_NAME}"> <IfFileName glob="gmail-dal.log.*"/> <IfAccumulatedFileSize exceeds="5GB" /> </Delete> </DefaultRolloverStrategy> </RollingFile> <!-- gmall-spi日志 --> <RollingFile name="GMALL-SPI-APPENDER" fileName="${LOG_HOME}/${APP_NAME}/gmail-spi.log" filePattern="${LOG_HOME}/${APP_NAME}/gmail-spi.log.%d{yyyy-MM-dd}" append="true"> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="3GB"/> </Policies> <DefaultRolloverStrategy max="1"> <Delete basePath="${LOG_HOME}/${APP_NAME}"> <IfFileName glob="gmail-spi.log.*"/> <IfAccumulatedFileSize exceeds="5GB" /> </Delete> </DefaultRolloverStrategy> </RollingFile> <!-- gmall-service日志 --> <RollingFile name="GMALL-SERVICE-APPENDER" fileName="${LOG_HOME}/${APP_NAME}/gmail-service.log" filePattern="${LOG_HOME}/${APP_NAME}/gmail-service.log.%d{yyyy-MM-dd}" append="true"> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="3GB"/> </Policies> <DefaultRolloverStrategy max="1"> <Delete basePath="${LOG_HOME}/${APP_NAME}"> <IfFileName glob="gmail-service.log.*"/> <IfAccumulatedFileSize exceeds="5GB" /> </Delete> </DefaultRolloverStrategy> </RollingFile> <!-- gmall-web日志 --> <RollingFile name="GMALL-WEB-APPENDER" fileName="${LOG_HOME}/${APP_NAME}/gmail-web.log" filePattern="${LOG_HOME}/${APP_NAME}/gmail-web.log.%d{yyyy-MM-dd}" append="true"> <PatternLayout pattern="${LOG_PATTERN}" charset="UTF-8"/> <Policies> <TimeBasedTriggeringPolicy/> <SizeBasedTriggeringPolicy size="3GB"/> </Policies> <DefaultRolloverStrategy max="1"> <Delete basePath="${LOG_HOME}/${APP_NAME}"> <IfFileName glob="gmail-web.log.*"/> <IfAccumulatedFileSize exceeds="5GB" /> </Delete> </DefaultRolloverStrategy> </RollingFile> </Appenders> <Loggers> <Logger name="STDOUT" additivity="false" level="info"> <AppenderRef ref="STDOUT-APPENDER"/> </Logger> <AsyncLogger name="STDERR" additivity="false" level="error"> <AppenderRef ref="STDERR-APPENDER"/> </AsyncLogger> <AsyncLogger name="org.springframework" additivity="false" level="${spring:logging.level.com.alipay.gmall}"> <AppenderRef ref="SPRING-APPENDER"/> <AppenderRef ref="STDOUT-APPENDER"/> </AsyncLogger> <!-- 设置异步打印日志 name:对应的包名/类名 additivity: 一旦一个日志输出到一个Logger,这个Logger的additivity设置为false,那么这个日志不会再继续向父Logger进行传递,忽略其他Logger的additivity的设置。 level:日志级别 --> <AsyncLogger name="com.alipay.gmall.common" additivity="false" level="${spring:logging.level.com.alipay.gmall}"> <AppenderRef ref="ERROR-APPENDER"/> <AppenderRef ref="GMALL-COMMON-APPENDER"/> </AsyncLogger> <AsyncLogger name="com.alipay.gmall.dal" additivity="false" level="${spring:logging.level.com.alipay.gmall}"> <AppenderRef ref="ERROR-APPENDER"/> <AppenderRef ref="GMALL-DAL-APPENDER"/> </AsyncLogger> <AsyncLogger name="com.alipay.gmall.spi" additivity="false" level="${spring:logging.level.com.alipay.gmall}"> <AppenderRef ref="ERROR-APPENDER"/> <AppenderRef ref="GMALL-SPI-APPENDER"/> </AsyncLogger> <AsyncLogger name="com.alipay.gmall.service" additivity="false" level="${spring:logging.level.com.alipay.gmall}"> <AppenderRef ref="ERROR-APPENDER"/> <AppenderRef ref="GMALL-SERVICE-APPENDER"/> </AsyncLogger> <AsyncLogger name="com.alipay.gmall.web" additivity="false" level="${spring:logging.level.com.alipay.gmall}"> <AppenderRef ref="ERROR-APPENDER"/> <AppenderRef ref="GMALL-WEB-APPENDER"/> </AsyncLogger> <AsyncLogger name="com.alipay.gmall" additivity="false" level="${spring:logging.level.com.alipay.gmall}"> <AppenderRef ref="APP-DEFAULT-APPENDER"/> <AppenderRef ref="ERROR-APPENDER"/> <AppenderRef ref="STDOUT-APPENDER"/> </AsyncLogger> <AsyncRoot level="${spring:logging.level.com.alipay.gmall}"> <AppenderRef ref="APP-DEFAULT-APPENDER"/> <AppenderRef ref="ERROR-APPENDER"/> <AppenderRef ref="STDOUT-APPENDER"/> </AsyncRoot> </Loggers> </Configuration>
注意点:
${spring:your.properties}
进行配置即可<!-- Log4j SpringBoot 引入这个依赖是为了能够在log4j.xml中读取application配置文件的属性-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-spring-boot</artifactId>
<version>2.17.2</version>
</dependency>
log4j2.xml
或log4j2-spring.xml
,则需要在application.properties文件中指定配置文件加载的位置。即加入以下配置:logging.config=classpath:{对应log4j文件名称}.xml
AsyncLogger
,则需要引入disruptor
依赖,否则程序会报以下错误。<!-- 引入这个依赖是为了能够使用异步打印 -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.7</version>
</dependency>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。