我正在从事一个基于java web的大型项目,该项目基于Spring和Hibernate的一些旧版本,并使用log4j 1.2x。由于最近在log4j2中发现了漏洞,我们已被指示升级到log4j2的最新版本。我正在尝试实现log4j2log4j1桥,这样就不必更新应用程序中的所有日志代码。除了我无法指定日志文件的存储位置外,一切都正常,因为log4j1桥似乎不支持系统属性。在启动tomcat服务器时,我传递了一个${catalina.base}属性,但是log4j1桥使用文本而不是替换属性值。
我的专家pom.xml
...
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.17.1</version>
</dependency>
...
log4j.xml文件中引用系统属性的部分:
log4j-dev.xml
...
<appender name="DAILY" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="${catalina.base}/logs/etl.log"/>
<param name="DatePattern" value="'.'yyyy-MM-dd"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="GATEWAY: %p %d [%t] %c{1}.%M(%L) | %m%n"/>
</layout>
</appender>
...
我定义使用log4j.xml的setenv.bat条目:
-Dlog4j2.debug=true -Dlog4j.configuration=log4j-dev.xml
tomcat日志中显示的属性说明所讨论的系统属性正在提供给log4j1桥
...
Command line argument: -Dlog4j2.debug=true
Command line argument: -Dlog4j.logDir=C:\dev\apache-tomcat-8.5.50\logs
Command line argument: -Dlog4j.configuration=log4j-dev.xml
Command line argument: -Dcatalina.base=C:\dev\apache-tomcat-8.5.50
Command line argument: -Dcatalina.home=C:\dev\apache-tomcat-8.5.50
Command line argument: -Djava.io.tmpdir=C:\dev\apache-tomcat-8.5.50\temp
...
以及日志中显示成功创建日志文件的位置及其使用的路径的部分:
...
DEBUG StatusLogger Class name: [org.apache.log4j.RollingFileAppender]
DEBUG StatusLogger Parsing layout of class: "org.apache.log4j.PatternLayout"
DEBUG StatusLogger PluginManager 'Converter' found 47 plugins
TRACE StatusLogger New file '${catalina.base}/etl.log' created = true
DEBUG StatusLogger Returning file creation time for C:\dev\apache-tomcat-8.5.50\bin\${catalina.base}\etl.log
DEBUG StatusLogger Starting RollingFileManager ${catalina.base}/etl.log
...
日志文件是在名为“${catalina.base}”的文件夹中创建的,该文件夹位于启动tomcat时所处的任何目录中。如何让log4j1桥识别系统属性的值,而不是使用文本属性名?
我做错了什么?任何人都可以提供任何建议。
除非我弄错了,否则这是支持log4j1的一个bug。x XML配置。对log4j1的支持。此提交中为属性格式引入了x变量替换(仅当您使用org.apache.log4j.config.Log4j1ConfigurationFactory
(这不是默认值)时,它才起作用,但缺少对XML格式的等效更改。你应该报告。
同时,您可以使用
${sys:catalina.base}
作为解决方法(基本上,log4j1.x桥支持log4j2.x查找,而不是简单的系统属性替换)
编辑:log4j1。x桥有三个配置工厂:
log4j1配置工厂
仅支持*。属性
文件,并且自上述提交(2016年)以来一直在使用属性替换,XmlConfigurationFactory
中缺少对属性替换的支持报告为LOG4J2-3328
我试图从系统属性中读取日志配置中的变量,但没有成功。我定义了一个非常简单的logback.groovy,如下所示: 然后是一个简单的test.scala: 注意,当我在日志文件中定义USER_HOME时,它工作得很好
问题内容: 有没有更好的方法可以从命令行打印系统属性?由于我们可以设置属性,例如 不用写课就能做到吗? 如果不可能的话,为什么不能/可行/好用命令行呢? 问题答案: 您可以在Hotspot JVM 1.7版及更高版本(1.6版不支持)中使用该标志: 自2010年底以来,OpenJDK就一直支持该标志。 在http://marxsoftware.blogspot.de/2016/02/hotspot
您好,我最近在spring项目中将日志记录从log4j迁移到了log4j2。 一切正常,但我想知道如何设置属性
我有一个Spring Boot应用程序如下: 我正在使用spring配置文件,并根据活动配置文件加载一个正确的特定环境文件:utils-local.properties、utils-dev.properties等。 当通过application.properties(spring)设置配置文件时,例如spring.profiles.active=local all工作良好,将加载正确的文件(uti
本文向大家介绍Bootstrap源码解读网格系统(3),包括了Bootstrap源码解读网格系统(3)的使用技巧和注意事项,需要的朋友参考一下 源码解读Bootstrap网格系统 工作原理 数据行(.row)必须包含在容器(.container)中,以便为其赋予合适的对齐方式和内距(padding)。如: .container的实现源码: 在行中可以添加列,但列数之和不能超过平分的总列数,比如12
为了测试结果,我安装了JDK8.91(没有安装JRE8.91)和JRE8.77。此外,我还创建了JRE_HOME、JAVA_HOME变量,排除了JDK文件夹中的路径变量。 我的Tomcat使用JRE,所以我希望在启动它之前获得当前的JRE版本。我找到了如下解决方法: 执行后 链接:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/syst