转自http://blog.csdn.net/clementad/article/details/51498864

spring boot中,配置log4j2的几个步骤(使用yml文件):

 

1、pom文件的依赖配置中,去掉spring boot默认的log配置,引入log4j2依赖包:

 

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <!-- log related -->  
  2.     <dependency<!-- exclude掉spring-boot的默认log配置 -->  
  3.         <groupId>org.springframework.boot</groupId>  
  4.         <artifactId>spring-boot-starter</artifactId>  
  5.         <exclusions>  
  6.             <exclusion>  
  7.                 <groupId>org.springframework.boot</groupId>  
  8.                 <artifactId>spring-boot-starter-logging</artifactId>  
  9.             </exclusion>  
  10.         </exclusions>  
  11.     </dependency>  
  12.     <dependency<!-- 引入log4j2依赖 -->  
  13.         <groupId>org.springframework.boot</groupId>  
  14.         <artifactId>spring-boot-starter-log4j2</artifactId>  
  15.     </dependency>  
  16.     <dependency>  <!-- 加上这个才能辨认到log4j2.yml文件 -->  
  17.         <groupId>com.fasterxml.jackson.dataformat</groupId>  
  18.         <artifactId>jackson-dataformat-yaml</artifactId>  
  19.     </dependency>  
  20. <!-- end of log related -->     


2、log4j2.yml文件配置(放置在resources文件夹中):

 

 

[plain] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. Configuration:  
  2.   status: warn  
  3.   
  4.   Properties: # 定义全局变量  
  5.     Property: # 缺省配置(用于开发环境)。其他环境需要在VM参数中指定,如下:  
  6.       #测试:-Dlog.level.console=warn -Dlog.level.xjj=trace  
  7.       #生产:-Dlog.level.console=warn -Dlog.level.xjj=info        
  8.       - name: log.level.console  
  9.         value: trace  
  10.       - name: log.level.xjj  
  11.         value: trace         
  12.       - name: log.path  
  13.         value: /opt/logs  
  14.       - name: project.name  
  15.         value: my-spring-boot  
  16.     
  17.   Appenders:  
  18.     Console:  #输出到控制台  
  19.       name: CONSOLE  
  20.       target: SYSTEM_OUT  
  21.       ThresholdFilter:  
  22.         level: ${sys:log.level.console} # “sys:”表示:如果VM参数中没指定这个变量值,则使用本文件中定义的缺省全局变量值  
  23.         onMatch: ACCEPT  
  24.         onMismatch: DENY  
  25.       PatternLayout:  
  26.         pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n"  
  27.     RollingFile: # 输出到文件,超过128MB归档  
  28.       - name: ROLLING_FILE  
  29.         ignoreExceptions: false  
  30.         fileName: ${log.path}/${project.name}.log  
  31.         filePattern: "${log.path}/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"  
  32.         PatternLayout:  
  33.           pattern: "%d{yyyy-MM-dd HH:mm:ss,SSS}:%4p %t (%F:%L) - %m%n"  
  34.         Policies:  
  35.           SizeBasedTriggeringPolicy:  
  36.             size: "128 MB"  
  37.         DefaultRolloverStrategy:  
  38.           max: 1000  
  39.   
  40.   Loggers:  
  41.     Root:  
  42.       level: info  
  43.       AppenderRef:  
  44.         - ref: CONSOLE  
  45.         - ref: ROLLING_FILE  
  46.     Logger: # 为com.xjj包配置特殊的Log级别,方便调试  
  47.       - name: com.xjj  
  48.         additivity: false  
  49.         level: ${sys:log.level.xjj}  
  50.         AppenderRef:  
  51.           - ref: CONSOLE  
  52.           - ref: ROLLING_FILE  


3、测试用例:

 

 

[java] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. @RunWith(SpringJUnit4ClassRunner.class)  
  2. @SpringApplicationConfiguration(classes = MySpringBootApplication.class)  
  3. public class MySpringBootApplicationTests {  
  4.     protected final Logger logger = LoggerFactory.getLogger(this.getClass());  
  5.     protected final ObjectMapper objectMapper = new ObjectMapper();  
  6.       
  7.     @Test  
  8.     public void contextLoads() {  
  9.         logger.trace("I am trace log.");  
  10.         logger.debug("I am debug log.");  
  11.         logger.warn("I am warn log.");  
  12.         logger.error("I am error log.");  
  13.     }  
  14.   
  15. }  


测试结果:

 

 

[plain] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1.   .   ____          _            __ _ _  
  2.  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \  
  3. ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \  
  4.  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )  
  5.   '  |____| .__|_| |_|_| |_\__, | / / / /  
  6.  =========|_|==============|___/=/_/_/_/  
  7.  :: Spring Boot ::        (v1.3.5.RELEASE)  
  8.   
  9. 2016-05-25 15:36:30,245:INFO main (StartupInfoLogger.java:48) - Starting MySpringBootApplicationTests on WIN-UCBBGRHGRK9 with PID 27276 (C:\workspace-sts\my-spring-boot\target\test-classes started by Xu in C:\workspace-sts\my-spring-boot)  
  10. 2016-05-25 15:36:30,245:DEBUG main (StartupInfoLogger.java:51) - Running with Spring Boot v1.3.5.RELEASE, Spring v4.2.6.RELEASE  
  11. 2016-05-25 15:36:30,245:INFO main (SpringApplication.java:666) - No active profile set, falling back to default profiles: default  
  12. 2016-05-25 15:36:30,285:INFO main (AbstractApplicationContext.java:578) - Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@638ef7ed: startup date [Wed May 25 15:36:30 CST 2016]; root of context hierarchy  
  13. 2016-05-25 15:36:30,522:INFO background-preinit (Version.java:30) - HV000001: Hibernate Validator 5.2.4.Final  
  14. 2016-05-25 15:36:31,673:INFO main (StartupInfoLogger.java:57) - Started MySpringBootApplicationTests in 1.726 seconds (JVM running for 2.749)  
  15. 2016-05-25 15:36:31,681:TRACE main (MySpringBootApplicationTests.java:20) - I am trace log.  
  16. 2016-05-25 15:36:31,681:DEBUG main (MySpringBootApplicationTests.java:21) - I am debug log.  
  17. 2016-05-25 15:36:31,682:WARN main (MySpringBootApplicationTests.java:22) - I am warn log.  
  18. 2016-05-25 15:36:31,682:ERROR main (MySpringBootApplicationTests.java:23) - I am error log.  
  19. 2016-05-25 15:36:31,689:INFO Thread-1 (AbstractApplicationContext.java:960) - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@638ef7ed: startup date [Wed May 25 15:36:30 CST 2016]; root of context hierarchy  


可以看到4个log都出来了,调整log.level参数可以决定让哪个级别的log出来。

 

同时,硬盘中/opt/logs/目录下也自动生成了一个叫做my-spring-boot.log的文件,保存了相同的log内容。

详细的源代码参考:https://github.com/xujijun/my-spring-boot