33

有没有办法log4j2.xml手动指定 Log4J 2.x 文件位置(如DOMConfigurator在 Log4J 1.x 中),而不会弄乱类路径和系统属性?

4

8 回答 8

33

您可以. #initialize(String contextName, ClassLoader loader, String configLocation)_ (您可以为类加载器传递 null。)org.apache.logging.log4j.core.config.Configurator

请注意,此类不是公共 API 的一部分,因此您的代码可能会因任何次要版本而中断

为了完整起见,您还可以使用此系统属性指定配置文件的位置:

-Dlog4j.configurationFile=path/to/log4j2.xml
于 2013-05-24T16:11:40.443 回答
8

在 Windows 中,请注意您需要将 URI 与log4j.configurationFile属性一起使用

-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
于 2017-03-01T21:51:58.373 回答
6

如果您使用的是 log4j2 并且属性在 log4j2.properties 文件中定义,则使用它。

-Dlog4j2.configurationFile=file:/home/atul/log4j2.properties

于 2019-03-14T11:05:05.747 回答
6

对于 log4j 版本 2.12.1,您可以在此处找到如何重新配置​​ log4j2 。

下面是一个例子

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;

File file = new File("C:\\Path for Windows OS\\yourConfig.xml");
    
LoggerContext context = (LoggerContext) LogManager.getContext(false);
context.setConfigLocation(file.toURI());
    
Logger log  = LogManager.getLogger(YourClass.class);

在我看来,配置 log4j2 的方式随着新版本的变化而变化,所以你应该意识到这一点。

于 2020-10-23T13:32:34.720 回答
4

使用 LoggerContext 允许setConfigLocation

File f = new File(this.logConfigFile);
URI fc = f.toURI();         
System.out.println("Loading logging config file: " + fc);
Logger l = (Logger) LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
l.getContext().setConfigLocation(fc);

或者

LoggerContext.getContext().setConfigLocation(java.net.URI);
于 2013-08-27T08:50:25.353 回答
1

您也可以像下面这样初始化

ConfigurationSource source = new ConfigurationSource(new FileInputStream(log4j file Path));
XmlConfiguration xmlConfig = new XmlConfiguration(source);
Logger logger = (Logger) LogManager.getLogger(); 
logger.getContext().start(xmlConfig); 

在每个类中,您可以获得如下记录器实例

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

private final Logger logger = LogManager.getLogger(ABC.class);
于 2015-04-28T03:54:15.040 回答
0

步骤:1 - 准备好带有附加程序详细信息的 log4J.xml 文件(主要在资源文件夹下)

步骤:2 - 应将以下代码添加到配置类(在以前的 log4J 中,我们有PropertyConfigurator,现在我们需要使用LoggerContext

String log4JFilePath = "file path of your log4J.xml file";
LoggerContext loggerContext = (LoggerContext)LoggerManager.getContext(false);
File file = new File(log4JFilePath);
loggerContext.setConfigLocation(file.toURI());

步骤:3 - 添加以下行以在任何类中使用记录器

private static final Logger logger = LogManager.getLogger(yourClassName.class);

logger.info("log here");

 
于 2022-01-15T20:56:38.970 回答
0
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.Configurator;

public class Foo {
    public static void main(String[] args) {

     Configurator.initialize(null, "src/main/config/log4j2.xml"); //path specify

     Logger logger = LogManager.getLogger(APITestToolMain.class);
     logger.info("working");
    }
}

资源:https ://www.baeldung.com/spring-boot-change-log4j2-location

于 2022-02-04T09:06:30.337 回答