Spring boot 中使用log4j2

之前写了篇正在把日志转换成Log4j2 现在才正式把项目的日子都换成log4j2,其中有些凌乱,现在把可用的方法过程写一下:

1、引入log4j2包,把spring-boot-starter-web以及spring-boot-starter两个包下面的spring-boot-starter-logging排除,然后引入spring-boot-starter-log4j2包

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
			<exclusions>
				<exclusion>
					<!-- 使用了log4j2,就要将spring-boot-starter-logging排除 -->
					<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>
			<exclusions>
				<exclusion>
					<!-- 使用了log4j2,就要将spring-boot-starter-logging排除 -->
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
        <!-- 支持log4j2的模块,注意把spring-boot-starter和spring-boot-starter-web包中的logging去掉 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>

2、log4j2配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
日志级别
trace: 是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。
debug: 调试么,我一般就只用这个作为最低级别,trace压根不用。是在没办法就用eclipse或者idea的debug功能就好了么。
info: 输出一下你感兴趣的或者重要的信息,这个用的最多了。
warn: 有些信息不是错误信息,但是也要给程序员的一些提示,类似于eclipse中代码的验证不是有error 和warn(不算错误但是也请注意,比如以下depressed的方法)。
error: 错误信息。用的也比较多。
fatal: 级别比较高了。重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。
 -->
<Configuration status="OFF">
    <!-- 定义日志存放目录 -->
    <properties>
        <property name="logPath">logs</property>
        <!-- 输出日志的格式 -->
        <!-- 
                %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间 
                %p : 日志输出格式 
                %c : logger的名称 
                %m : 日志内容,即 logger.info("message") 
                %n : 换行符 
                %C : Java类名 
                %L : 日志输出所在行数 
                %M : 日志输出所在方法名 
                hostName : 本地机器名 
                hostAddress : 本地ip地址 -->
        <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} %L %M - %msg%xEx%n</property>
    </properties>
    <!--先定义所有的appender(输出器) -->
    <Appenders>
        <!--输出到控制台 -->
        <Console name="ConsoleLog" target="SYSTEM_OUT">
            <!--只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" />
            <!--输出日志的格式,引用自定义模板 PATTERN -->
            <PatternLayout pattern="${PATTERN}" />
        </Console>
        <!--输出到文件 -->
        <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
        <!--append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
        <File name="TestLog" fileName="${logPath}/test.log" append="false">
            <PatternLayout pattern="${PATTERN}" />
        </File>
        <!-- 把error等级记录到文件 一般不用 -->        
        <File name="FileLog" fileName="${logPath}/error.log">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="${PATTERN}" />
        </File>
        <!--输出到循环日志,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingFile name="RollingFileLog" fileName="${logPath}/app.log" filePattern="${logPath}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY" />
            <PatternLayout pattern="${PATTERN}" />
            <SizeBasedTriggeringPolicy size="10MB" />
        </RollingFile>
    </Appenders>
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
    <Loggers>
        <!--建立一个默认的Root的logger,记录大于level高于warn的信息,如果这里的level高于Appenders中的,则Appenders中也是以此等级为起点,比如,这里level="fatal",则Appenders中只出现fatal信息 -->
        <!-- 生产环境level>=warn -->
        <Root level="debug">
            <!-- 输出器,可选上面定义的任何项组合,或全选,做到可随意定制 -->
            <appender-ref ref="ConsoleLog" />
            <appender-ref ref="TestLog" />
            <appender-ref ref="FileLog" />
            <appender-ref ref="RollingFileLog" />
        </Root>
    	<!-- 第三方日志系统 -->
        <!--过滤掉spring和mybatis的一些无用的DEBUG信息,也可以在spring boot 的logging.level.org.springframework=FATAL设置-->
        <!-- <logger name="org.springframework" level="INFO"></logger> -->
        <!-- <logger name="org.mybatis" level="INFO"></logger> -->
        <!-- <logger name="org.apache.http" level="warn" /> -->
    </Loggers>
</Configuration>

3、划重点:application.properties中配置日志

#要扫描的包记录日志信息
logging.config=classpath:log4j2.xml
# 定义记录某个包内日志的级别,高于等于则记录,可以多个
logging.level.org.springframework=FATAL

4、在需要的地方使用

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

...
private static Logger logger = LoggerFactory.getLogger(xx.class);
...
logger.info("------xxxx-------");

或者

import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

...
private static Logger logger = LogManager.getLogger(XXX.class);
...
logger.debug(XXX);

猜你喜欢

转载自my.oschina.net/xldc/blog/1809303