使用Log4J2.properties作为Spring Boot的日志工具
2017-06-16 17:29
691 查看
Spring Boot 的官网教材 说可以使用 Log4J 作为日志工具,但是并没有给出详细的说明,也陆续找了下网友的例子,跟着上面做,在 application.properties 里注册了 log4j2.xml (注意不是 log4j.properties),运行
Spring Boot 的 main 方法报错,说找不到 org.apache.log4j.Priority :出错日志如下:
我的依赖树显示了 log4j 的 jar 包是有的:
从 MvnRepository 上看到这个 log4j 的 jar 包已经进化到 log4j-core 上,而这个包其实已经被 log4j2 starter 依赖了,之所以这样,从上面的错误日志看,应该是 Druid 使用了这个旧的版本,所以要加进来,之所以没有冲突是因为里面的 package 路径不一样。
后来又网上找了下,希望能使用 log4j2.properties 的方式定义日志,LOG4J 2 CONFIGURATION: USING PROPERTIES FILE 比较好,写的很详细, 特别提到了从 log4j2 版本 2.4 才开始支持 properties
的方式,而我使用的 spring boot 版本较高,所以 log4j2 的版本已经是 2.7 了。
所以我的 application.properties 文件是这样注册 log4j2 的:
整个 log4j2.properties 文件如下:
Spring Boot 的 main 方法报错,说找不到 org.apache.log4j.Priority :出错日志如下:
Caused by: java.lang.NoClassDefFoundError: org.apache.log4j.Priority at java.lang.Class.forNameImpl(Native Method) ~[?:1.8.0-internal] at java.lang.Class.forName(Class.java:273) ~[?:1.8.0-internal] at com.alibaba.druid.util.Utils.loadClass(Utils.java:222) ~[druid-1.0.25.jar:1.0.25] at com.alibaba.druid.filter.FilterManager.loadFilter(FilterManager.java:104) ~[druid-1.0.25.jar:1.0.25] at com.alibaba.druid.pool.DruidAbstractDataSource.addFilters(DruidAbstractDataSource.java:1232) ~[druid-1.0.25.jar:1.0.25] at com.alibaba.druid.pool.DruidAbstractDataSource.setFilters(DruidAbstractDataSource.java:1221) ~[druid-1.0.25.jar:1.0.25] at com.hebta.vinci.opstat.persistence.DruidDBConfig.dataSource(DruidDBConfig.java:94) ~[classes/:?] at com.hebta.vinci.opstat.persistence.DruidDBConfig$$EnhancerBySpringCGLIB$$e6af5e40.CGLIB$dataSource$0(<generated>) ~[classes/:?] at com.hebta.vinci.opstat.persistence.DruidDBConfig$$EnhancerBySpringCGLIB$$e6af5e40$$FastClassBySpringCGLIB$$d9e7878b.invoke(<generated>) ~[classes/:?] at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE] at com.hebta.vinci.opstat.persistence.DruidDBConfig$$EnhancerBySpringCGLIB$$e6af5e40.dataSource(<generated>) ~[classes/:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0-internal] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95) ~[?:1.8.0-internal] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) ~[?:1.8.0-internal] at java.lang.reflect.Method.invoke(Method.java:507) ~[?:2.6 (06-30-2015)] at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:162) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:835) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:741) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:467) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1173) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1067) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:513) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1342) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1249) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:208) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585) ~[spring-beans-4.3.9.RELEASE.jar:4.3.9.RELEASE] ... 24 more Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Priority at java.net.URLClassLoader.findClass(URLClassLoader.java:607) ~[?:1.8.0-internal] at java.lang.ClassLoader.loadClassHelper(ClassLoader.java:797) ~[?:1.8.0-internal] at java.lang.ClassLoader.loadClass(ClassLoader.java:771) ~[?:1.8.0-internal] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325) ~[?:1.8.0-internal] at java.lang.ClassLoader.loadClass(ClassLoader.java:752) ~[?:1.8.0-internal] at java.lang.Class.forNameImpl(Native Method) ~[?:1.8.0-internal] at java.lang.Class.forName(Class.java:273) ~[?:1.8.0-internal] at com.alibaba.druid.util.Utils.loadClass(Utils.java:222) ~[druid-1.0.25.jar:1.0.25] at com.alibaba.druid.filter.FilterManager.loadFilter(FilterManager.java:104) ~[druid-1.0.25.jar:1.0.25] at com.alibaba.druid.pool.DruidAbstractDataSource.addFilters(DruidAbstractDataSource.java:1232) ~[druid-1.0.25.jar:1.0.25] at com.alibaba.druid.pool.DruidAbstractDataSource.setFilters(DruidAbstractDataSource.java:1221) ~[druid-1.0.25.jar:1.0.25] at com.hebta.vinci.opstat.persistence.DruidDBConfig.dataSource(DruidDBConfig.java:94) ~[classes/:?] at com.hebta.vinci.opstat.persistence.DruidDBConfig$$EnhancerBySpringCGLIB$$e6af5e40.CGLIB$dataSource$0(<generated>) ~[classes/:?] at com.hebta.vinci.opstat.persistence.DruidDBConfig$$EnhancerBySpringCGLIB$$e6af5e40$$FastClassBySpringCGLIB$$d9e7878b.invoke(<generated>) ~[classes/:?] at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-4.3.9.RELEASE.jar:4.3.9.RELEASE] at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:358) ~[spring-context-4.3.9.RELEASE.jar:4.3.9.RELEASE] at com.hebta.vinci.opstat.persistence.DruidDBConfig$$EnhancerBySpringCGLIB$$e6af5e40.dataSource(<generated>) ~[classes/:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0-internal] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95) ~[?:1.8.0-internal] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55) ~[?:1.8.0-internal] at java.lang.reflect.Method.invoke(Method.java:507) ~[?:2.6 (06-30-2015)]
我的依赖树显示了 log4j 的 jar 包是有的:
[INFO] +- org.springframework.boot:spring-boot-starter-aop:jar:1.5.4.RELEASE:compile [INFO] | +- org.springframework:spring-aop:jar:4.3.9.RELEASE:compile [INFO] | | \- org.springframework:spring-beans:jar:4.3.9.RELEASE:compile [INFO] | \- org.aspectj:aspectjweaver:jar:1.8.10:compile [INFO] +- org.mybatis.spring.boot:mybatis-spring-boot-starter:jar:1.3.0:compile [INFO] | +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.5.4.RELEASE:compile [INFO] | | +- org.apache.tomcat:tomcat-jdbc:jar:8.5.15:compile [INFO] | | | \- org.apache.tomcat:tomcat-juli:jar:8.5.15:compile [INFO] | | \- org.springframework:spring-jdbc:jar:4.3.9.RELEASE:compile [INFO] | | \- org.springframework:spring-tx:jar:4.3.9.RELEASE:compile [INFO] | +- org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:jar:1.3.0:compile [INFO] | +- org.mybatis:mybatis:jar:3.4.4:compile [INFO] | \- org.mybatis:mybatis-spring:jar:1.3.1:compile [INFO] +- org.springframework.session:spring-session:jar:1.3.1.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.5.4.RELEASE:compile [INFO] | +- org.hibernate:hibernate-validator:jar:5.3.5.Final:compile [INFO] | | +- javax.validation:validation-api:jar:1.1.0.Final:compile [INFO] | | +- org.jboss.logging:jboss-logging:jar:3.3.1.Final:compile [INFO] | | \- com.fasterxml:classmate:jar:1.3.3:compile [INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.8:compile [INFO] | | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.0:compile [INFO] | | \- com.fasterxml.jackson.core:jackson-core:jar:2.8.8:compile [INFO] | +- org.springframework:spring-web:jar:4.3.9.RELEASE:compile [INFO] | | \- org.springframework:spring-context:jar:4.3.9.RELEASE:compile [INFO] | \- org.springframework:spring-webmvc:jar:4.3.9.RELEASE:compile [INFO] | \- org.springframework:spring-expression:jar:4.3.9.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot-starter:jar:1.5.4.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot:jar:1.5.4.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-autoconfigure:jar:1.5.4.RELEASE:compile [INFO] | +- org.springframework:spring-core:jar:4.3.9.RELEASE:compile [INFO] | \- org.yaml:snakeyaml:jar:1.17:runtime [INFO] +- org.springframework.boot:spring-boot-starter-log4j2:jar:1.5.4.RELEASE:compile [INFO] | +- org.apache.logging.log4j:log4j-slf4j-impl:jar:2.7:compile [INFO] | | \- org.slf4j:slf4j-api:jar:1.7.25:compile [INFO] | +- org.apache.logging.log4j:log4j-api:jar:2.7:compile [INFO] | +- org.apache.logging.log4j:log4j-core:jar:2.7:compile [INFO] | +- org.slf4j:jcl-over-slf4j:jar:1.7.25:compile [INFO] | \- org.slf4j:jul-to-slf4j:jar:1.7.25:compile [INFO] +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.5.4.RELEASE:provided [INFO] | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.15:provided [INFO] | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.15:provided [INFO] | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.15:provided [INFO] +- org.springframework.boot:spring-boot-starter-test:jar:1.5.4.RELEASE:test [INFO] | +- org.springframework.boot:spring-boot-test:jar:1.5.4.RELEASE:test [INFO] | +- org.springframework.boot:spring-boot-test-autoconfigure:jar:1.5.4.RELEASE:test [INFO] | +- com.jayway.jsonpath:json-path:jar:2.2.0:test [INFO] | | \- net.minidev:json-smart:jar:2.2.1:test [INFO] | | \- net.minidev:accessors-smart:jar:1.1:test [INFO] | | \- org.ow2.asm:asm:jar:5.0.3:test [INFO] | +- junit:junit:jar:4.12:test [INFO] | +- org.assertj:assertj-core:jar:2.6.0:test [INFO] | +- org.mockito:mockito-core:jar:1.10.19:test [INFO] | | \- org.objenesis:objenesis:jar:2.1:test [INFO] | +- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] | +- org.hamcrest:hamcrest-library:jar:1.3:test [INFO] | +- org.skyscreamer:jsonassert:jar:1.4.0:test [INFO] | | \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test [INFO] | \- org.springframework:spring-test:jar:4.3.9.RELEASE:test [INFO] +- org.springframework.boot:spring-boot-devtools:jar:1.5.4.RELEASE:compile [INFO] +- com.alibaba:druid:jar:1.0.25:compile [INFO] | +- com.alibaba:jconsole:jar:1.8.0:system [INFO] | \- com.alibaba:tools:jar:1.8.0:system [INFO] \- com.oracle:ojdbc6:jar:11.2.0.3:compile再就看了下以前工程使用的 log4j 的 jar 包引入,就把下面这段拷贝到 Spring Boot 工程里,居然可以工作了:
<!-- if no this dependency, then error comes: ClassNotFoundException:org.apache.log4j.Priority! --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency>
从 MvnRepository 上看到这个 log4j 的 jar 包已经进化到 log4j-core 上,而这个包其实已经被 log4j2 starter 依赖了,之所以这样,从上面的错误日志看,应该是 Druid 使用了这个旧的版本,所以要加进来,之所以没有冲突是因为里面的 package 路径不一样。
后来又网上找了下,希望能使用 log4j2.properties 的方式定义日志,LOG4J 2 CONFIGURATION: USING PROPERTIES FILE 比较好,写的很详细, 特别提到了从 log4j2 版本 2.4 才开始支持 properties
的方式,而我使用的 spring boot 版本较高,所以 log4j2 的版本已经是 2.7 了。
所以我的 application.properties 文件是这样注册 log4j2 的:
# 使用 log4j 作为日志输出 logging.config=classpath:log4j2.properties整个 pom.xml :
<?xml version="1.0" encoding="UTF-8"?> <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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.hebta.vinci</groupId> <artifactId>opstat</artifactId> <version>1.0</version> <packaging>war</packaging> <name>opstat</name> <description>Demo project for Spring Boot</description> <repositories> <repository> <id>nexus</id> <name>maven-central</name> <url>http://192.168.1.220:8081/repository/maven-public/</url> </repository> <repository> <id>springsource.releases</id> <name>SpringSource GA Repository</name> <url>http://repo.springsource.org/release</url> <releases> <enabled>true</enabled> </releases> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.4.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</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> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- below is added by developer --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.0.25</version> </dependency> <dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3</version> <scope>compile</scope> </dependency> <!-- if no this dependency, then error comes: ClassNotFoundException:org.apache.log4j.Priority! --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.12</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
整个 log4j2.properties 文件如下:
name=PropertiesConfig property.filename = logs appenders = console, file appender.console.type = Console appender.console.name = STDOUT appender.console.layout.type = PatternLayout appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1} - %msg%n appender.file.type = File appender.file.name = LOGFILE appender.file.fileName= D:/mylog/springboot/logError.log appender.file.layout.type=PatternLayout appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1} - %msg%n rootLogger.level = debug rootLogger.appenderRef.stdout.ref = STDOUT rootLogger.appenderRef.file.ref = LOGFILE
相关文章推荐
- Spring Boot 中使用 spring-boot-devtools (使用 Gradle 作为构建工具)
- spring boot 学习(六)spring boot 各版本中使用 log4j2 记录日志
- 使用Log4J来作为Spring Boot的日志系统
- SpringBoot内部配置:“application.properties配置”和”使用XML配置”,读取属性文件中的内容,日志配置,Profile配置(学习:SpringBoot实战)
- 使用RTT(Real-Time Terminal)作为高性能的日志输出工具
- JAVA中如何使用log4j作为日志记录工具
- springboot使用之三:springboot使用logback日志
- REDIS学习(3.2)spring boot 使用redis作为缓存
- spring-boot使用AOP统一处理日志
- 46. Spring Boot中使用AOP统一处理Web请求日志【从零开始学Spring Boot】
- Spring Boot中@ConfigurationProperties的使用
- (25)Spring Boot使用自定义的properties【从零开始学Spring Boot】
- spring boot 使用application.properties 进行外部配置
- spring boot (四) 日志的使用
- Spring Boot中使用AOP统一处理Web请求日志
- Spring Boot基础教程5-日志配置-logback和log4j2
- spring boot log4j2配置(使用log4j2.yml文件)
- Spring Boot使用自定义的properties
- 25. Spring Boot使用自定义的properties【从零开始学Spring Boot】
- Spring Boot实战之配置使用Sentry上报错误日志(一)