如何指定Log4J 2.x配置位置?

hts6caw3  于 2022-11-06  发布在  其他
关注(0)|答案(9)|浏览(178)

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

gk7wooem

gk7wooem1#

您可以在org.apache.logging.log4j.core.config.Configurator中使用静态方法#initialize(String contextName, ClassLoader loader, String configLocation)(请参阅此处的源代码)。(您可以为类加载器传递null。)
请注意,此类不是公共API的一部分,因此***您的代码可能会在任何次要版本中中断***。
为了完整起见,您还可以使用以下系统属性指定配置文件得位置:

-Dlog4j.configurationFile=path/to/log4j2.xml
clj7thdc

clj7thdc2#

在Windows中,请注意需要使用带有log4j.configurationFile属性的URI

-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
z18hc3ub

z18hc3ub3#

对于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的方式随着新版本的发布而改变,因此您应该意识到这一点。

qij5mzcb

qij5mzcb4#

如果您使用log4j 2,并且属性在www.example.com文件中定义log4j2.properties,则使用此选项。
/home/atul/www.example.com/下载的配置文件log4j2.properties

bf1o4zei

bf1o4zei5#

使用LoggerContext允许设置配置位置。

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);
irlmq6kh

irlmq6kh6#

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

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);
qpgpyjmq

qpgpyjmq7#

步骤:1 -准备好包含appender详细信息的log4J.xml文件(主要在resource文件夹下)
步骤: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");
mbzjlibv

mbzjlibv8#

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

4ioopgfo

4ioopgfo9#

void initializeLogger()
{      
    try
        {
            String basepath=checkpath();
            File f = new File(basepath+"\\config\\log4j2.properties");
            URI fc = f.toURI(); 
            LoggerContext context = (LoggerContext) LogManager.getContext(false);
            context.setConfigLocation(f.toURI());
        }
        catch (Exception e)
        {
            errorlog="Unable to load logging property:";
            System.out.println(errorlog+": "+e.getMessage());
        }   
}

这是我从不同位置初始化log4j2属性文件的方法,因此我所做的只是在main方法中调用initializeLogger()方法。
而且它工作得很完美。
也许您需要看看checkpath()块是什么样子的,我在下面添加了这个函数。

String checkpath()
    {
        String parentpath="";
        try
        {
           URL url=getClass().getProtectionDomain().getCodeSource().getLocation();
           File f=new File(url.toURI());
           parentpath=f.getParent();
        }
        catch(Exception ex)
        {
            //logger.error("unable to retrieve application parent path");
        }
        return parentpath;
    }

相关问题