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字符,就从左边交远销出的字符截掉。