springboot在log4j2配置文件中引用pom变量
引入log4j2首先需要引入log4j2,而spring boot默认使用的是logback,需要排除默认的log组件。logback性能不如log4j2优秀,所以我们换成log4j2。
配置log4j2org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-logging org.springframework.boot spring-boot-starter-log4j2
引入后,spring-boot-starter-log4j2会有默认的配置,然后笔者的需求是修改日志打印的路径,不同环境使开启不同的日志级别等,所以要修改其配置文件
比如我的配置文件是resources目录下创建log4j2-spring.xml
使用maven变量${log_app_appender} ${log_app_appender}
以上,用了许多变量比如,${log_file_root}、${log_app_appender}
这些变量,我们希望不同的环境取不同的值
那么我们可以利用maven的profile来实现
dev /usr/local/log/${log.file} debug debug release /usr/local/log/${log.file} info error
可以看到,上面有两个环境的配置,分别是dev和release。我们打包时命令加上对应的环境名即可,例如:clean install -Dmaven.test.skip=true -P release
但是
spring boot 2.0 默认的变量符号是@变量名@,我们上面用的是${},所以需要将它改成${变量名},在pom文件build节点下引入maven-resource-plugin,然后设置useDefaultDelimiters = true,变量的符号就变成了${}
org.springframework.boot spring-boot-maven-plugin org.apache.maven.plugins maven-resources-plugin UTF-8 true
这样配置完后,笔者发现打包完成后的xml文件中,变量并没有被替换掉,还是${变量名}的字符串形式,还需要增加以下配置
src/main/resources true org.springframework.boot spring-boot-maven-plugin org.apache.maven.plugins maven-resources-plugin UTF-8 true
再次打包,${log_file_root}、${log_app_appender}已经打入xml文件中了。
至于为什么在配置中增加了resource目录的过滤就好了,也许是这样才能在打包时处理一遍这个目录,希望有懂的大佬交流一下。
参考:https://blog.csdn.net/chen_blog/article/details/107222088



