Java 如何以编程方式配置 appender 或在 log4j2 中初始化日志记录?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/24489019/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 12:32:49 来源:igfitidea点击:
How to programatically configure appenders or initialize logging in log4j2?
提问by Akhilesh
I have been trying to configure appender programatically, but not getting success so far. i just want to configure appender without file so that it can send logs to console or file.
我一直在尝试以编程方式配置 appender,但到目前为止还没有成功。我只想配置没有文件的appender,以便它可以将日志发送到控制台或文件。
String PATTERN = "%d [%p|%c|%C{1}] %m%n";
PatternLayout layout = PatternLayout.createLayout(PATTERN, null, null,
null, null, null);
ConsoleAppender console = ConsoleAppender.createAppender(layout, null,
null, "console", "true", "true"); // create appender
AppenderRef appender = AppenderRef.createAppenderRef("console",
"DEBUG", null);
logger = (Logger) LogManager.getLogger(InitLogger.class);
LoggerContext context = logger.getContext();
BaseConfiguration configuration =(BaseConfiguration) context.getConfiguration();
configuration.addAppender(console);
logger.addAppender(configuration.getAppender("console"));
回答by Bruce
Try the following sample code
试试下面的示例代码
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.Configuration;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.apache.logging.log4j.core.layout.PatternLayout;
import org.apache.logging.log4j.spi.ExtendedLogger;
import org.apache.logging.log4j.spi.LoggerContext;
public class TestLog4j2 {
public static void main(String[] args) {
try {
ConsoleAppender console = ConsoleAppender.createAppender(PatternLayout.createDefaultLayout(), null, "SYSTEM_OUT", "console", null, null);
final LoggerContext ctx = (LoggerContext) new org.apache.logging.log4j.core.LoggerContext("console" );
final Configuration config = ((org.apache.logging.log4j.core.LoggerContext) ctx).getConfiguration();
console.start();
config.addAppender(console);
AppenderRef ref = AppenderRef.createAppenderRef("console", null, null);
AppenderRef[] refs = new AppenderRef[] {ref};
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.ALL, "org.apache.logging.log4j",
"true", refs, null, config, null );
loggerConfig.addAppender(console, null, null);
config.addLogger("org.apache.logging.log4j", loggerConfig);
((org.apache.logging.log4j.core.LoggerContext) ctx).updateLoggers();
ExtendedLogger logger = (ExtendedLogger) ctx.getLogger("console");
logger.error("abc");
} catch (Exception e) {
e.printStackTrace();
}
}
}
回答by Paul Vargas
Here is the simplest way to do this:
这是执行此操作的最简单方法:
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.appender.ConsoleAppender;
import org.apache.logging.log4j.core.config.AbstractConfiguration;
import org.apache.logging.log4j.core.config.AppenderRef;
import org.apache.logging.log4j.core.config.LoggerConfig;
import org.apache.logging.log4j.core.layout.PatternLayout;
public class Main {
public static void main(String[] args) {
configure();
Logger logger = LogManager.getLogger("com.company");
logger.trace("Hello Word!");
}
public static void configure() {
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
AbstractConfiguration config = (AbstractConfiguration) ctx.getConfiguration();
ConsoleAppender appender = ConsoleAppender.createDefaultAppenderForLayout(PatternLayout.createDefaultLayout());
appender.start();
config.addAppender(appender);
AppenderRef[] refs = new AppenderRef[] { AppenderRef.createAppenderRef(appender.getName(), null, null) };
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.ALL, LogManager.ROOT_LOGGER_NAME, "true", refs, null, config, null);
loggerConfig.addAppender(appender, null, null);
config.addLogger(LogManager.ROOT_LOGGER_NAME, loggerConfig);
ctx.updateLoggers();
}
}