抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

引言

对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维。而日志的输出需要有一定的规划,如日志命名、日志大小,日志分割的文件个数等。在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依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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-log4j2</artifactId>
</dependency>

log4j2.xml配置路径

默认路径

引入 log4j2 依赖后,默认在 src/main/resources目录 下加入 log4j2.xml配置文件 对日志进行配置即可,然后在 application.yml 中进行访问路径的配置。

示例如下:

  1. log4j2.xml部署位置
  2. yml配置
1
2
3
4
5
6
7
8
9
10
11
12
logging:
config: classpath:log4j2.xml
level:
root: INFO
javax.activation: info
org.apache.catalina: INFO
org.apache.commons.beanutils.converters: INFO
org.apache.coyote.http11.Http11Processor: INFO
org.apache.http: INFO
org.apache.tomcat: INFO
org.springframework: INFO
com.chinamobile.cmss.bdpaas.resource.monitor: DEBUG

自定义部署位置

当然我们也可以在微服务部署的 config/ 目录下放置,然后在 application.yml 中进行访问路径的配置。

示例如下:

  1. log4j2.xml部署位置
    1
    2
    3
    4
    5
    6
    [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:30 application.yml
    -r-------- 1 userA userA 8342 Sep 8 16:33 log4j2.xml
  2. yml配置
1
2
3
4
5
6
7
8
9
10
11
12
logging:
config: /home/userA/SpringBoot/micro-service01/config/log4j2.xml
level:
root: INFO
javax.activation: info
org.apache.catalina: INFO
org.apache.commons.beanutils.converters: INFO
org.apache.coyote.http11.Http11Processor: INFO
org.apache.http: INFO
org.apache.tomcat: INFO
org.springframework: INFO
com.chinamobile.cmss.bdpaas.resource.monitor: DEBUG

log4j2.xml配置详解

xml配置模板

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<properties>
<property name="LOG_HOME">./service-logs</property>
</properties>
<Appenders>
<!-- 配置内容 -->
</Appenders>
<Loggers>
<!-- 配置内容 -->
</Loggers>
</Configuration>

配置参数详解

Configuration

根节点 Configuration 中有两个常用的属性:status和monitorInterval。如:<Configuration status="WARN" monitorInterval="30">

属性:

  1. status:是用于指定log4j的级别;
  2. monitorInterval:是用于指定log4j自动重新检测读取配置内容的间隔时间,单位为秒(s),最小值为5秒。

Properties

1
2
3
4
5
6
<Configuration status="warn" name="MyApp" packages="">
<properties>
<property name="LOG_HOME">./service-logs</property>
</properties>
<!-- 配置内容 -->
</Configuration>

变量配置,如模板中的 <property name="LOG_HOME">./service-logs</property>,我们可以配置日志的路径。后续日志存放的前缀路径即为 ./service-logs 下。

Appenders

Console

1
2
3
4
5
6
7
8
9
10
11
12
<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_OUTSYSTEM_ERR,默认是 SYSTEM_OUT

节点:

  1. PatternLayout:用于指定输出格式,不设置的话,默认为 :%m%n

File

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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节点用于将日志输出到指定文件。

属性:

  1. name:用于指定Appender的名称;
  2. fileName:用于指定日志文件的全路径。

节点:

  1. PatternLayout:用于指定输出格式,不设置的话,默认为 :%m%n

RollingFile

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<Configuration status="warn" name="MyApp" packages="">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>

RollingFile节点用于实现日志文件滚动更新。

属性:

  1. name:用于指定Appender的名称;
  2. fileName:用于指定日志文件的全路径;
  3. filePattern:用于指定分割文件的日志全路径(命名规则)。

节点:

  1. PatternLayout:用于指定输出格式,不设置的话,默认为 :%m%n
  2. Policies:设置日志文件切割参数;
  3. TimeBasedTriggeringPolicy:基于时间间隔触发的滚动策略;
  4. SizeBasedTriggeringPolicy:基于日志文件大小触发的滚动策略;
  5. DefaultRolloverStrategy:设置默认策略。

Loggers

1
2
3
4
5
6
7
<Configuration status="warn" name="MyApp" packages="">
<Loggers>
<Root level="error">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>

节点:

  1. Root:用于指定项目的根日志;
  2. Logger:用于指定日志的形式,指定不同包的日志级别。

转载: https://www.cnblogs.com/Andya/p/13641254.html

评论