有没有办法手动指定Log4J 2.x log4j2.xml文件位置(如Log4J 1.x中的DOMConfigurator),而不干扰类路径和系统属性?
log4j2.xml
DOMConfigurator
gk7wooem1#
您可以在org.apache.logging.log4j.core.config.Configurator中使用静态方法#initialize(String contextName, ClassLoader loader, String configLocation)(请参阅此处的源代码)。(您可以为类加载器传递null。)请注意,此类不是公共API的一部分,因此***您的代码可能会在任何次要版本中中断***。为了完整起见,您还可以使用以下系统属性指定配置文件得位置:
org.apache.logging.log4j.core.config.Configurator
#initialize(String contextName, ClassLoader loader, String configLocation)
-Dlog4j.configurationFile=path/to/log4j2.xml
clj7thdc2#
在Windows中,请注意需要使用带有log4j.configurationFile属性的URI
log4j.configurationFile
-Dlog4j.configurationFile=file://C:\path\to\log4j2.xml
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的方式随着新版本的发布而改变,因此您应该意识到这一点。
qij5mzcb4#
如果您使用log4j 2,并且属性在www.example.com文件中定义log4j2.properties,则使用此选项。/home/atul/www.example.com/下载的配置文件log4j2.properties
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);
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);
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");
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
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; }
9条答案
按热度按时间gk7wooem1#
您可以在
org.apache.logging.log4j.core.config.Configurator
中使用静态方法#initialize(String contextName, ClassLoader loader, String configLocation)
(请参阅此处的源代码)。(您可以为类加载器传递null。)请注意,此类不是公共API的一部分,因此***您的代码可能会在任何次要版本中中断***。
为了完整起见,您还可以使用以下系统属性指定配置文件得位置:
clj7thdc2#
在Windows中,请注意需要使用带有
log4j.configurationFile
属性的URIz18hc3ub3#
对于log4j版本2.12.1,您可以在此处找到如何重新配置log4j2。
下面是一个示例
在我看来,配置log4j2的方式随着新版本的发布而改变,因此您应该意识到这一点。
qij5mzcb4#
如果您使用log4j 2,并且属性在www.example.com文件中定义log4j2.properties,则使用此选项。
/home/atul/www.example.com/下载的配置文件log4j2.properties
bf1o4zei5#
使用LoggerContext允许设置配置位置。
或者可替换地
irlmq6kh6#
您也可以像下面这样初始化
在每个类中,您可以获取如下记录器示例
qpgpyjmq7#
步骤:1 -准备好包含appender详细信息的log4J.xml文件(主要在resource文件夹下)
步骤:2 -应将以下代码添加到配置类中(在之前的log4J中,我们有PropertyConfigurator,现在我们需要使用LoggerContext)
步骤:3 -添加以下行,以便在任何类中使用记录器
mbzjlibv8#
资源:https://www.baeldung.com/spring-boot-change-log4j2-location
4ioopgfo9#
这是我从不同位置初始化log4j2属性文件的方法,因此我所做的只是在main方法中调用initializeLogger()方法。
而且它工作得很完美。
也许您需要看看checkpath()块是什么样子的,我在下面添加了这个函数。