我的Web应用程序正在使用log4j2.properties,当前此文件位于我的Web应用程序内的WEB-INF中,客户端要求外部化此文件

dl5txlt9  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(132)

我们可以log4j2.properties使用系统属性-Dlog4j2.configurationFile=将www.example.com文件<file_path>外部化,但是,在同一个服务器上部署了多个Web应用程序,因此,我只想显式地为我的Web应用程序设置文件路径。一种方法是使用下面的代码。但是,LoggerContext是一个私有的API,在次要版本中可能会发生变化www.example.com )外部log4j2.properties文件?

// import org.apache.logging.log4j.core.LoggerContext;

LoggerContext context = (org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false);
File file = new File("path/to/a/different/log4j2.xml");

// this will force a reconfiguration
context.setConfigLocation(file.toURI());
u3r8eeie

u3r8eeie1#

如果您将log4j-web添加到应用程序中,则会出现特定于Web应用程序的附加功能(参见documentation)。
在您的特定情况下,可以使用log4jConfiguration servlet上下文参数指定该特定应用程序的配置文件的位置。如何从外部指定servlet上下文参数取决于servlet容器。
例如,在Tomcat中,您可以在context.xml file中执行此操作:

<Context>
    <Parameter name="log4jConfiguration" value="/path/to/config/file" override="false"/>
    ...
</Context>

备注org.apache.logging.log4j.core.LoggerContext不是内部类,它只是Log4j Core(Log4j API的正式实现)中的类,而org.apache.logging.log4j.LoggerContext属于Log4j API。除非将实现从Log4j Core切换到另一个Log4j Core,否则LoggerContext将始终为core.LoggerContext

相关问题