【发布时间】:2017-08-07 07:30:23
【问题描述】:
现在我在 java logger 上花费了几天时间:log4j2 如果您决定在 .xml 文件的基础上工作,该方法相对容易。 但是如果你想通过代码创建配置,并通过java进行适配,那就有点复杂了。
下面是我现在可以管理的代码。 重新配置日志级别没有成功
每次深度都停止在错误级别
2017-03-15 23:24:27,248 [main] ERROR: This is Logger for 1 Error
2017-03-15 23:24:27,256 [main] ERROR: This is Logger 1 Error
您能否帮助指定如何重新加载已编程的 log4j2 配置?
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.builder.api.AppenderComponentBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilderFactory;
import org.apache.logging.log4j.core.config.builder.api.LayoutComponentBuilder;
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
public class Log4j2Init {
// -------------------------------------------------------
// CONSTRUCTOR
// -------------------------------------------------------
public Log4j2Init() {
}
// -------------------------------------------------------
// TEST
// -------------------------------------------------------
public static void main(String[] args) {
Logger logger;
Log4j2Init log4j2Init = new Log4j2Init();
log4j2Init.addAppenderLogger("./pac-tool.log",Level.ERROR);
logger = LogManager.getLogger(Log4j2Init.class.getName());
logger.info("This is Logger for 1 Info");
logger.error("This is Logger for 1 Error");
logger.debug("This is Logger for 1 Debug");
logger.trace("This is Logger for 1 Trace");
// Reconfiguration of log depth
log4j2Init.addAppenderLogger("./pac-tool.log",Level.TRACE);
logger = LogManager.getLogger(Log4j2Init.class.getName());
logger.info("This is Logger 1 Info");
logger.error("This is Logger 1 Error");
logger.debug("This is Logger 1 Debug");
logger.trace("This is Logger 1 Trace");
}
// -------------------------------------------------------
// METHOD
// -------------------------------------------------------
public void addAppenderLogger(String filename, Level vlevel )
{
ConfigurationBuilder< BuiltConfiguration > builder;
LayoutComponentBuilder layoutBuilder;
AppenderComponentBuilder appenderBuilder;
// Create log4j2 Builder
builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel( Level.INFO);
builder.setConfigurationName("BuilderTest");
// ------------------------------------------
// CONSOLE
// ------------------------------------------
// PatternLayout
layoutBuilder = builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable");
// Create Console Appender : Type = "CONSOLE"
appenderBuilder =
builder.newAppender("Stdout", "CONSOLE")
.addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT)
.add(layoutBuilder);
builder.add( appenderBuilder );
// ------------------------------------------
// FILE
// ------------------------------------------
// PatternLayout
layoutBuilder = builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n");
// Create File Appender : Type = "FILE"
appenderBuilder = builder.newAppender("logfile", "FILE")
.addAttribute("fileName", filename)
.addAttribute("append", "false")
.addAttribute("immediateFlush", "false")
.add(layoutBuilder);
builder.add(appenderBuilder);
// create the new logger
builder.add( builder.newRootLogger( vlevel )
.add( builder.newAppenderRef( "Stdout" ) )
.add( builder.newAppenderRef( "logfile" ) )
);
Configurator.initialize(builder.build());
}
}
谢谢
【问题讨论】:
-
也许这会有所帮助? stackoverflow.com/questions/23434252/…
-
谢谢托拜厄斯,是的,它帮助很大