SpringBoot—整合log4j2⼊门和l配置详解
引⾔
  对于⼀个线上程序或者服务⽽⾔,重要的是要有⽇志输出,这样才能⽅便运维。⽽⽇志的输出需要有⼀定的规划,如⽇志命名、⽇志⼤⼩,⽇志分割的⽂件个数等。在Spring的框架下,我们可以使⽤log4j来进⾏⽇志的设置,⾼版本的SpringBoot会使⽤log4j2。
介绍
log4j2概述
  截取官⽹的原话:Apache Log4j 2 is an upgrade to Log4j that provides significant improvements over its predecessor, Log4j 1.x, and provides many of the improvements available in Logback while fixing some inherent problems in Logback’s architecture.
  Log4j其实可以理解为log for java,所以是java的⽇志框架,提供⽇志服务,⽽Log4j 2是Log4j的升级版本,性能⽐logback好。
  ⽇志级别优先级从低到⾼:ALL、DEBUG、 INFO、 WARN、 ERROR、FATAL、 OFF。⼀般官⽹建
议就使⽤DEBUG、INFO、WARN和ERROR这四个,但是我们可以加⼀个ALL最低级别的来进⾏总⽇志的输出。⽇志的登记越⾼,打出的⽇志越少。
log4j2的pom依赖
<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>
<dependency>
<groupId>org.springframework.boot</groupId>log4j2不打印日志
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
这边要注意的是:
1. 在引⼊log4j2时,需要排除掉Logback⽇志框架的依赖即。
<artifactId>spring-boot-starter-logging</artifactId>
2. 如果是1.
3.x及以下版本的Spring Boot才⽀持log4j的⽇志配置。
<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>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j</artifactId>
</dependency>
  log4j2⼀般可以通过xml,json,yaml或者properties形式⽂件来实现,我们这边主要介绍xml⽂件格式。
默认路径
  引⼊log4j2依赖后,默认在src/main/resources⽬录下加⼊l配置⽂件对⽇志进⾏配置即可,然后在l中进⾏访问路径的配置。  ⽰例如下:
1. log4j
在代码⼯程中的src/main/resources⽬录下放⼊配置⽂件。
2. yml配置
#⽇志配置⽆特殊需求⽆需更改
logging:
config:  l
level:
root: INFO
javax.activation: info
org.apache.catalina: INFO
org.verters: INFO
http11.Http11Processor: INFO
org.apache.http: INFO
at: INFO
org.springframework: INFO
itor: DEBUG
⾃定义部署位置
当然我们也可以在微服务部署的config/⽬录下放置,然后在l中进⾏访问路径的配置。
  ⽰例如下:我们的micro-service01部署中配置的l路径。
1. log4j
[userA@linux01 config]$ pwd
/home/userA/SpringBoot/micro-service01/config
[userA@linux01 config]$ ll
total 24
-rwxr-xr-x 1 userA userA 5938 Sep  9 16:l
-
r-------- 1 userA userA 8342 Sep  8 16:l
2. yml配置
#⽇志配置⽆特殊需求⽆需更改
logging:
config: /home/userA/SpringBoot/micro-service01/l
level:
root: INFO
javax.activation: info
org.apache.catalina: INFO
org.verters: INFO
http11.Http11Processor: INFO
org.apache.http: INFO
at: INFO
org.springframework: INFO
itor: DEBUG
xml配置模板
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!--<Configuration status="WARN" monitorInterval="30"> -->
<properties>
<property name="LOG_HOME">./service-logs</property>
</properties>
<Appenders>
<!--*********************控制台⽇志***********************-->
<Console name="consoleAppender" target="SYSTEM_OUT">
<!--设置⽇志格式及颜⾊-->
<PatternLayout
pattern="%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red}"                    disableAnsi="false" noConsoleNoAnsi="false"/>
</Console>
<!--*********************⽂件⽇志***********************-->
<!--all级别⽇志-->
<RollingFile name="allFileAppender"
fileName="${LOG_HOME}/all.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%">
<!--设置⽇志格式-->
<PatternLayout>
<pattern>%d %p %C{} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<!-- 设置⽇志⽂件切分参数 -->
<!--<OnStartupTriggeringPolicy/>-->
<!--设置⽇志基础⽂件⼤⼩,超过该⼤⼩就触发⽇志⽂件滚动更新-->
<SizeBasedTriggeringPolicy size="100 MB"/>
<!--设置⽇志⽂件滚动更新的时间,依赖于⽂件命名filePattern的设置-->
<TimeBasedTriggeringPolicy/>
</Policies>
<!--设置⽇志的⽂件个数上限,不设置默认为7个,超过⼤⼩后会被覆盖;依赖于filePattern中的%i-->            <DefaultRolloverStrategy max="100"/>
</RollingFile>
<!--debug级别⽇志-->
<RollingFile name="debugFileAppender"
fileName="${LOG_HOME}/debug.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%">
<Filters>
<!--过滤掉info及更⾼级别⽇志-->
<ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<!--设置⽇志格式-->
<PatternLayout>
<pattern>%d %p %C{} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<!-- 设置⽇志⽂件切分参数 -->
<!--<OnStartupTriggeringPolicy/>-->
<!--设置⽇志基础⽂件⼤⼩,超过该⼤⼩就触发⽇志⽂件滚动更新-->
<SizeBasedTriggeringPolicy size="100 MB"/>
<!--设置⽇志⽂件滚动更新的时间,依赖于⽂件命名filePattern的设置-->
<TimeBasedTriggeringPolicy/>
</Policies>
<!--设置⽇志的⽂件个数上限,不设置默认为7个,超过⼤⼩后会被覆盖;依赖于filePattern中的%i-->            <DefaultRolloverStrategy max="100"/>
</RollingFile>
<!--info级别⽇志-->
<RollingFile name="infoFileAppender"
fileName="${LOG_HOME}/info.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%">
<Filters>
<!--过滤掉warn及更⾼级别⽇志-->
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<!--设置⽇志格式-->
<PatternLayout>
<pattern>%d %p %C{} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<!-- 设置⽇志⽂件切分参数 -->
<!--<OnStartupTriggeringPolicy/>-->
<!--设置⽇志基础⽂件⼤⼩,超过该⼤⼩就触发⽇志⽂件滚动更新-->
<SizeBasedTriggeringPolicy size="100 MB"/>
<!--设置⽇志⽂件滚动更新的时间,依赖于⽂件命名filePattern的设置-->
<TimeBasedTriggeringPolicy interval="1" modulate="true />
</Policies>
<!--设置⽇志的⽂件个数上限,不设置默认为7个,超过⼤⼩后会被覆盖;依赖于filePattern中的%i-->            <!--<DefaultRolloverStrategy max="100"/>-->
</RollingFile>
<!--warn级别⽇志-->
<RollingFile name="warnFileAppender"
fileName="${LOG_HOME}/warn.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%">
<Filters>
<!--过滤掉error及更⾼级别⽇志-->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<!--设置⽇志格式-->
<PatternLayout>
<pattern>%d %p %C{} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<!-- 设置⽇志⽂件切分参数 -->
<!--<OnStartupTriggeringPolicy/>-->
<!--设置⽇志基础⽂件⼤⼩,超过该⼤⼩就触发⽇志⽂件滚动更新-->
<SizeBasedTriggeringPolicy size="100 MB"/>
<!--设置⽇志⽂件滚动更新的时间,依赖于⽂件命名filePattern的设置-->
<TimeBasedTriggeringPolicy/>
</Policies>
<!--设置⽇志的⽂件个数上限,不设置默认为7个,超过⼤⼩后会被覆盖;依赖于filePattern中的%i-->            <DefaultRolloverStrategy max="100"/>
</RollingFile>
<!--error及更⾼级别⽇志-->
<RollingFile name="errorFileAppender"
fileName="${LOG_HOME}/error.log"
filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%">
<!--设置⽇志格式-->
<PatternLayout>
<pattern>%d %p %C{} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<!-- 设置⽇志⽂件切分参数 -->
<!--<OnStartupTriggeringPolicy/>-->
<!--设置⽇志基础⽂件⼤⼩,超过该⼤⼩就触发⽇志⽂件滚动更新-->
<SizeBasedTriggeringPolicy size="100 MB"/>
<!--设置⽇志⽂件滚动更新的时间,依赖于⽂件命名filePattern的设置-->
<TimeBasedTriggeringPolicy/>
</Policies>
<!--设置⽇志的⽂件个数上限,不设置默认为7个,超过⼤⼩后会被覆盖;依赖于filePattern中的%i-->
<DefaultRolloverStrategy max="100"/>
</RollingFile>
<!--json格式error级别⽇志-->
<RollingFile name="errorJsonAppender"
fileName="${LOG_HOME}/error-json.log"
filePattern="${LOG_HOME}/error-json-%d{yyyy-MM-dd}-%">
<JSONLayout compact="true" eventEol="true" locationInfo="true"/>
<Policies>
<SizeBasedTriggeringPolicy size="100 MB"/>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- 根⽇志设置 -->
<Root level="debug">
<AppenderRef ref="allFileAppender" level="all"/>
<AppenderRef ref="consoleAppender" level="debug"/>
<AppenderRef ref="debugFileAppender" level="debug"/>
<AppenderRef ref="infoFileAppender" level="info"/>
<AppenderRef ref="warnFileAppender" level="warn"/>
<AppenderRef ref="errorFileAppender" level="error"/>
<AppenderRef ref="errorJsonAppender" level="error"/>
</Root>
<!--spring⽇志-->
<Logger name="org.springframework" level="debug"/>
<!--druid数据源⽇志-->
<Logger name="druid.sql.Statement" level="warn"/>
<!-- mybatis⽇志 -->
<Logger name="batis" level="warn"/>
<Logger name="org.hibernate" level="warn"/>
<Logger name="com.zaxxer.hikari" level="info"/>
<Logger name="org.quartz" level="info"/>
<Logger name="com.andya.demo" level="debug"/>
</Loggers>
</Configuration>
配置参数详解
Configuration
根节点Configuration中有两个常⽤的属性:status和monitorterval。如:<Configuration status="WARN" monitorInterval="30">属性
1. status:是⽤于指定log4j的级别;
2. monitorterval:是⽤于指定log4j⾃动重新检测读取配置内容的间隔时间,单位为秒(s),最⼩值为5秒。Properties
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<properties>
<property name="LOG_HOME">./service-logs</property>
</properties>
<Appenders>
<File name="MyFile" fileName="${LOG_HOME}/app.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
变量配置,如模板中的<property name="LOG_HOME">./service-logs</property>,我们可以配置⽇志的路径。后续⽇志存放的前缀路径即为./service-logs下,<File name="MyFile" fileName="${LOG_HOME}/app.log">中配置了前缀,app.log就会存放在./service-logs下。
Appenders
Console
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout pattern="%m%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
  Console节点⽤于定义输出控制台的Appender。
属性
1. name:⽤于指定Appender的名称;
2. target:⽤于指定输出⽬标,⼀般是SYSTEM_OUT或SYSTEM_ERR,默认是SYSTEM_OUT;
节点
1. PatternLayout:⽤于指定输出格式,不设置的话,默认为:%m%n
File
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<File name="MyFile" fileName="logs/app.log">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
</File>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
  File节点⽤于将⽇志输出到指定⽂件,⼀般不⽤该节点,⽽使⽤RollingFile节点。
属性
1. name:⽤于指定Appender的名称;
2. fileName:⽤于指定⽇志⽂件的全路径;
节点
1. PatternLayout:⽤于指定输出格式,不设置的话,默认为:%m%n
RollingFile
  RollingFile节点⽤于实现⽇志⽂件更动更新的Appender,当满⾜条件(⽇志⼤⼩、指定时间等)重命名或打包原⽇志⽂件进⾏归档,⽣成新⽇志⽂件⽤于⽇志写⼊。
  我们可以设置ALL、DEBUG、 INFO、 WARN、 ERROR这些级别的RollingFileAppender。
(1)基于⼤⼩的滚动策略
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。