使用log4j1.2-2桥,是否可以动态配置日志设置

55ooxyrt  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(96)

我们使用的是log4j1到log4j2的桥,
log4j-1.2-api-2.17.1.jar
我们的代码使用PropertyConfigu

System.getProperty( "appserver.Name" );
System.setProperty( "appserver.Name", "/usr/local/logs/server3" );
l4jprops.put( "appserver.Name", "/usr/local/logs/server3" );    

PropertyConfigurator.configure( l4jprops );
logger = Logger.getLogger(PfsSystemPropertiesServlet.class.getName());

以下是log4j设置示例。

log4j.appender.AuthAppender.File=${appserver.Name}/log4j_api_auth.log
log4j.appender.AuthAppender.DatePattern='.'yyyy-MM-dd

这看起来不像我们想要的那样写日志,我们怎么才能让这段代码和桥一起工作呢?这个类可用。

lp0sw83n

lp0sw83n1#

在Log4j 2.17.1之前,PropertyConfigurator一直是一个空操作。这将在即将发布的版本中改变(参见source code):您的代码应该可以正常工作而无需任何更改
为了测试新版本,请添加快照存储库:

<repositories>
  <repository>
    <id>apache.snapshots</id>
    <name>Apache Snapshot Repository</name>
    <url>https://repository.apache.org/snapshots</url>
    <releases>
      <enabled>false</enabled>
    </releases>
  </repository>
</repositories>

并将log4j-1.2-api的版本设置为2.17.2-SNAPSHOT

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.17.2-SNAPSHOT</version>
</dependency>

**编辑:**如果您无法使用快照或等待下一个版本,则可以模拟PropertyConfigurator得行为,如下所示:

import org.apache.log4j.config.PropertiesConfiguration;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.NullConfiguration;

// PropertiesConfiguration only accepts an InputStream in 2.17.1
final ByteArrayOutputStream os = new ByteArrayOutputStream();
l4jprops.save(os, null);
final InputStream is = new ByteArrayInputStream(os.toByteArray());
// Initialize to prevent automatic configuration.
Configurator.initialize(new NullConfiguration());
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = new PropertiesConfiguration(ctx, new ConfigurationSource(is), 0);
Configurator.reconfigure(config);

相关问题