Spring Boot 集成log4j2日志

1、pom文件配置java

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>cn.test.sun</groupId>
    <artifactId>spring-boot</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>spring-boot Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.6.RELEASE</version>
    </parent>
    <dependencies>
        <!--排除默认实现-->
        <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>
        <!--引入log4j2-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.4</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>spring-boot</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2、修改SpringBootS配置文件,指定log4j2.xml位置web

logging.config=classpath:log4j2.xml

3、配置log4j2.xml日志文件spring

<?xml version="1.0" encoding="UTF-8"?>
<!--参数:status 指定log4j自己输出日志的级别-->
<Configuration status="ERROR">
    <properties>
        <property name="LOG_HOME">D:\\\logs</property>
        <property name="SERVER_NAME">logPro</property>
    </properties>
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout>
                <pattern>[%d{yyyy-MM-dd HH:mm:ss} %5p] [%t] [%C.%M]:%L - %m%n</pattern>
            </PatternLayout>
        </Console>
        <!-- 这个会打印出全部的info及如下级别的信息,天天一个文件,文件大于100MB继续拆分-->
        <RollingFile name="business" fileName="${LOG_HOME}\${SERVER_NAME}_business.log"
                     filePattern="${LOG_HOME}\${SERVER_NAME}_business_%d{yyyy-MM-dd}_%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其余的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss} %5p] [%t] [%C.%M]:%L - %m%n"/>
            <Policies>
                <!-- 基于时间完成周期性的log文件分割。参数interval:指定两次分割的时间间隔。
                单位:以日志的命名精度来肯定单位,好比yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟
                modulate:是否对分割时间进行调制。若modulate=true,则分割时间将以0点为边界进行偏移计算。
                好比,modulate=true,interval=4h,若是上次分割日志的时间为03:00,
                下次分割时间为04:00,以后的封存时间依次为08:00,12:00,16:00 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 基于大小完成周期性的log文件分割-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
        <RollingFile name="monitor" fileName="${LOG_HOME}\${SERVER_NAME}_monitor.log"
                     filePattern="${LOG_HOME}\${SERVER_NAME}_monitor_%d{yyyy-MM-dd-HH-mm}_%i.log">
            <!--控制台只输出level及以上级别的信息(onMatch),其余的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss} %5p] [%t] [%C.%M]:%L - %m%n"/>
            <Policies>
                <!-- 基于时间完成周期性的log文件分割。参数interval:integer型,指定两次分割之间的时间间隔。
                  单位:以日志的命名精度来肯定单位,好比yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟
                  modulate,boolean型,说明是否对分割时间进行调制。若modulate=true,则分割时间将以0点为边界进行
                  偏移计算。好比,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,
                  则下次封存日志的时间为04:00,以后的封存时间依次为08:00,12:00,16:00  -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!-- 基于大小完成周期性的log文件分割-->
                <SizeBasedTriggeringPolicy size="100 KB"/>
            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!--日志不输出到根logger中-->
        <logger name="monitor" level="info" additivity="false">
            <appender-ref ref="monitor"/>
        </logger>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="business"/>
        </Root>
    </Loggers>
</Configuration>

附录:日志输出格式。 apache

格式参数:
%p:  输出日志信息级别,即DEBUG,INFO,WARN,ERROR,FATAL, 
%d:  输出日志时间点的日期或时间,默认格式为ISO8601,也能够在其后指定格式。
例: %d{yyyy-MM-dd HH:mm:ss,SSS}  输出:2017:08:10 22:10:28,921
%r:  输出自应用启动到输出该log信息耗费的毫秒数 
%c:  输出日志信息所属的类目,一般就是所在类的全名 
%t:  输出产生该日志事件的线程名 
%l:  输出日志事件的发生位置,至关于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。
例: Testlog4.main(TestLog4.java:10) 
%x:  输出和当前线程相关联的NDC(嵌套诊断环境),尤为用到像java servlets这样的多客户多线程的应用中。 
%%:  输出一个”%”字符 
%F:  输出日志消息产生时所在的文件名称 
%L:  输出代码中的行号 
%m:  输出代码中指定的消息,产生的日志具体信息 
%n:  输出一个回车换行符,Windows平台为”\r\n”,Unix平台为”\n”

输出日志信息换行能够在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
1)%20c:    指定输出所属类名称的最小的宽度是20,若是名称小于20的话,默认的状况下右对齐。 
2)%-20c:   指定输出所属类名称最小的宽度是20,若是名称小于20的话,”-”号指定左对齐。 
3)%.30c:   指定输出所属类名称最大的宽度是30,若是名称大于30的话,就会将左边多出的字符截掉,小于30的话也不会有空格。 
4)%20.30c: 若是输出所属类名称小于20就补空格,而且右对齐,若是其名称大于30字符,就从左边交远销出的字符截掉。
相关文章
相关标签/搜索