为了便于我们的移植,我们在启动Server的时候,通常会加入一个参数:-Dlog4j.home=XXX,然后在配置log4j的时候,可以使用相对路径,如:
然后,日志就会输入到我们想要的地方,或许因为是文档上介绍是这样介绍的,我们可能没有疑问。但是,我们换另外一种思路来想?如果没有添加这样启动参数,而直接调用会是什么样的结果?答案就是:启动的时候会报 XXX/XXX.log找不到类似错误。
尝试另外一种办法:如果定义相同名称的环境变量如何?答案仍然是相同的错误。我们在想,log4j是否没有提供环境变量的读取?找呀找呀,找到一篇文章介绍到,可以通过修改log4j的源码,以达到能够使用环境变量的目的。
于是,将看过的源代码进行修改:参照 修改 log4j 代码 以支持在 log4j.properties 设置环境变量
下面也将相应的代码列出来:(添加函数getEnvProperty)
同时在函数添加相应的调用:public static String substVars(String val, Properties props)
注意:下面代码的先后顺序,决定着启动参数与环境变量的先后顺序
这样就可以解决系统环境变量没有办法使用的问题,但是这里有两个问题可以思考一下:
1、getProperty与getenv 的区别?可以参考JAVA帮助手册 Oracle帮助文档
2、为什么log4j没有在代码中添加获取系统环境变量?其实也很显然,系统环境变更是针对当前主机的所有Server,而-Dlog4j.home只针对当前Server,符合编程的最小权限化。
附件为已编译好的OptionConverter.class,有使用的可以下载。
分享到:
相关推荐
Log4j是一个广泛使用的...总结来说,Log4j中的相对路径问题可以通过系统属性、环境变量或动态配置来解决,确保日志文件能够在不同环境中被正确写入。这样的灵活性使得开发者无需频繁修改配置,提高了代码的可移植性。
### Log4j中配置日志文件相对路径方法详解 #### 概述 在软件开发过程中,日志记录是一项重要的功能,它有助于开发者调试程序、监控应用程序的运行状态以及追踪问题。`Log4j`作为一款优秀的日志管理工具,被广泛应用...
在SSH(Struts、Spring、Hibernate)等Java Web框架中,配置Log4j以使用相对路径是非常常见的需求,这有助于在不同环境下保持日志文件的一致性。以下是关于Log4j相对路径配置的详细说明: 首先,在`Web.xml`文件中...
### 完全相对路径的log4j配置 #### 背景与意义 Log4j 是一个基于 Java 的日志框架,广泛应用于企业级应用的日志记录。它提供了灵活的日志记录机制,允许开发者根据需求调整日志级别、格式以及输出目的地等。本文将...
解决的办法自然是用相对路径代替绝对路径,其实log4j的FileAppender本身就有这样的机制,如:log4j.appender.logfile.File=${WORKDIR}/logs/app.log 其中“${WORKDIR}/”是个变量,会被System Property中的“WORKDIR...
### log4j乱码问题解决办法 #### 一、引言 在开发过程中,日志记录是必不可少的一个环节。良好的日志系统可以帮助开发者快速定位问题并进行调试。Log4j作为一款广泛使用的Java日志框架,在很多项目中扮演着重要...
Log4j是Apache提供的一款广泛使用的日志框架,它提供了丰富的功能和灵活的配置,使得我们可以根据需要动态地改变日志的输出路径。本文将深入探讨如何在Log4j中实现日志输出路径的动态配置。 首先,我们要理解Log4j...
解决这个问题的第一步是在Maven项目中引入Log4j的依赖。在`pom.xml`文件中添加以下代码段: ```xml <groupId>log4j <artifactId>log4j <version>1.2.17 ``` 这将确保你的项目能够找到并使用Log4j库。 接下来...
然后使用Logger.getLogger()方法获取日志记录器,而Log4j2需要import org.apache.logging.log4j.Level、org.apache.logging.log4j.LogManager和org.apache.logging.log4j.Logger,使用LogManager.getLogger()方法...
这个“log4j简单范例 日志文件是相对路径的”示例将展示如何配置Log4j来记录日志,并将日志文件保存在程序运行时的相对路径下。 首先,Log4j的核心组件包括Logger(日志器)、Appender(输出目的地)和Layout(格式...
总结来说,Log4j2.16.0是一个关键的安全更新,解决了Log4j2框架中的“Log4Shell”漏洞。对于使用若依框架或其他依赖Log4j2的项目,升级到这个版本至关重要,可以避免系统遭受恶意攻击。用户需要下载并正确安装这个...
与Log4j 1.x相比,Log4j2在设计上进行了重大改进,并解决了Logback等其他日志框架中存在的某些体系结构问题。 #### 特性概述 1. **审计功能**:Log4j2设计时考虑到了审计需求,这意味着即使在配置更新过程中,它也...
本文将详细讨论如何解决Log4j日志文件出现的乱码问题。 首先,我们要理解Log4j的工作原理。Log4j允许开发者自定义日志输出的方式,包括输出到控制台、文件、数据库等。它使用了`QuietWriter`类来写入日志,`...
Log4j和SLF4J(Simple Logging Facade for Java)是两个广泛使用的日志框架,它们各有优势并常被一起使用以提供更灵活的日志解决方案。本文将详细探讨如何通过SLF4J接口来使用Log4j进行日志记录,并展示一个测试代码...
针对Log4j 2 远程代码执行漏洞,需要用到的升级资源包,适用于maven资源库,包括log4j,log4j-core,log4j-api,log4j-1.2-api,log4j-jpa等全套2.15.0 maven资源库jar包。如果是maven本地仓库使用,需要将zip包解压...
分别有disruptor-3.3.4.jar(Log4j2异步日志的底层实现)、log4j-api-2.19.0.jar(log4j门面)、log4j-core-2.19.0.jar(log4j实现)、log4j-slf4j-impl-2.19.0.jar(SLF4J与Log4j绑定)、slf4j-api-1.7.30.jar(SLF...
apache-log4j-1.2.15.jar, apache-log4j-extras-1.0.jar, apache-log4j-extras-1.1.jar, apache-log4j.jar, log4j-1.2-api-2.0.2-javadoc.jar, log4j-1.2-api-2.0.2-sources.jar, log4j-1.2-api-2.0.2.jar, log4j-...
使用这两个JAR文件时,需要确保在应用程序的类路径中同时包含它们,以便正确运行Log4j 2框架。配置Log4j通常通过一个XML或JSON格式的配置文件完成,例如`log4j2.xml`或`log4j2.json`,这个文件定义了日志的输出级别...
Log4j、Log4j2和Fastjson的安全性问题在过去曾引起广泛关注,例如Log4j2的CVE-2021-44228(也被称为Log4Shell漏洞),这是一个远程代码执行漏洞,影响了许多使用Log4j2的系统。这个插件可能就是为了检测和利用这些...
1. **稳定性与兼容性**:Log4j 1.2.15是一个稳定版本,修复了前一版本中的多个已知问题,确保了与其他系统的良好兼容性。 2. **配置灵活性**:通过配置文件(通常为log4j.properties或log4j.xml),开发者可以灵活...