有没有办法log4j2.xml
手动指定 Log4J 2.x 文件位置(如DOMConfigurator
在 Log4J 1.x 中),而不会弄乱类路径和系统属性?
8 回答
您可以在. #initialize(String contextName, ClassLoader loader, String configLocation)
_ (您可以为类加载器传递 null。)org.apache.logging.log4j.core.config.Configurator
请注意,此类不是公共 API 的一部分,因此您的代码可能会因任何次要版本而中断。
为了完整起见,您还可以使用此系统属性指定配置文件的位置:
-Dlog4j.configurationFile=path/to/log4j2.xml
在 Windows 中,请注意您需要将 URI 与log4j.configurationFile
属性一起使用
-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
如果您使用的是 log4j2 并且属性在 log4j2.properties 文件中定义,则使用它。
-Dlog4j2.configurationFile=file:/home/atul/log4j2.properties
对于 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 的方式随着新版本的变化而变化,所以你应该意识到这一点。
使用 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);
您也可以像下面这样初始化
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);
步骤: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");
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