如何根据log4j中配置文件中的环境更改记录器级别?

时间:2017-11-20 12:27:00

标签: java logging log4j

我有一个log4j.xml配置文件。如果环境变量发生变化,我想更改日志级别。我有多种环境,包括DEVELOP,TEST,PREPROD等。我该怎么做?

DEVELOP:

 <Loggers>
    <Root level="debug">
        <AppenderRef ref="Console"/>
    </Root>
 </Loggers>

TEST:

 <Loggers>
    <Root level="error">
        <AppenderRef ref="Console"/>
    </Root>
 </Loggers>

2 个答案:

答案 0 :(得分:0)

我想说创建几个appender,每个设置一个,并有自己的日志级别。然后在运行时决定获取哪一个,并相应地获取记录器。

例如:

log4j.rootLogger=WARN
log4j.com.yourcompany.package1= DEBUG, appender1, stdout
log4j.com.yourcompany.package2= INFO, appender2, stdout

然后在文件中定义appender12。您可以为两个appender输入相同的输出文件。在Java中创建记录器时,您可以在两者之间进行选择:

final Logger log = Logger.getLogger(package1.Class1.class);
// final Logger log = Logger.getLogger(package2.Class2.class);

我没有测试它,但我认为它有效。我相信您也可以在log4j.xml定义中使用类名而不是包名。

答案 1 :(得分:0)

我遇到了同样的情况,我在下面做了,

将单独的 log4j配置与后缀作为环境。

log4j-<ENVIRONMENT>.xml

在您的记录器工厂类或减号选项中,传递环境并选择正确的文件

String log4jFile = "/log4j-" + System.getProperty("ENVIRONMENT") + ".xml";
String url = LoggerFactory.class.getResource(log4jFile); 
org.apache.log4j.xml.DOMConfigurator.configure(url);