下面列出了org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration#org.apache.logging.log4j.core.appender.ConsoleAppender 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Test
void testSoutPlainTextTempJson() {
Configuration configuration = getLogConfig(Map.of());
assertThat(configuration.getAppenders().values()).hasSize(2);
Optional<ConsoleAppender> consoleAppender = configuration.getAppenders().values().stream()
.filter(ConsoleAppender.class::isInstance)
.map(ConsoleAppender.class::cast)
.findAny();
assertThat(consoleAppender).isNotEmpty();
assertThat(consoleAppender.get().getLayout()).isInstanceOf(PatternLayout.class);
Optional<RollingFileAppender> fileAppender = configuration.getAppenders().values().stream()
.filter(RollingFileAppender.class::isInstance)
.map(RollingFileAppender.class::cast)
.findAny();
assertThat(fileAppender).isNotEmpty();
assertThat(fileAppender.get().getLayout()).isInstanceOf(EcsLayout.class);
}
@Test
void testSoutJsonTempJson() {
Configuration configuration = getLogConfig(Map.of("log_format_sout", "json"));
assertThat(configuration.getAppenders().values()).hasSize(2);
Optional<ConsoleAppender> consoleAppender = configuration.getAppenders().values().stream()
.filter(ConsoleAppender.class::isInstance)
.map(ConsoleAppender.class::cast)
.findAny();
assertThat(consoleAppender).isNotEmpty();
assertThat(consoleAppender.get().getLayout()).isInstanceOf(EcsLayout.class);
Optional<RollingFileAppender> fileAppender = configuration.getAppenders().values().stream()
.filter(RollingFileAppender.class::isInstance)
.map(RollingFileAppender.class::cast)
.findAny();
assertThat(fileAppender).isNotEmpty();
assertThat(fileAppender.get().getLayout()).isInstanceOf(EcsLayout.class);
}
/**
* Configures the Log4j2 console appender(s), using the specified verbosity:
* <ul>
* <li>{@code -vvv} : enable TRACE level</li>
* <li>{@code -vv} : enable DEBUG level</li>
* <li>{@code -v} : enable INFO level</li>
* <li>(not specified) : enable WARN level</li>
* </ul>
*/
public void configureLoggers() {
Level level = getTopLevelCommandLoggingMixin(mixee).calcLogLevel();
LoggerContext loggerContext = LoggerContext.getContext(false);
LoggerConfig rootConfig = loggerContext.getConfiguration().getRootLogger();
for (Appender appender : rootConfig.getAppenders().values()) {
if (appender instanceof ConsoleAppender) {
rootConfig.removeAppender(appender.getName());
rootConfig.addAppender(appender, level, null);
}
}
if (rootConfig.getLevel().isMoreSpecificThan(level)) {
rootConfig.setLevel(level);
}
loggerContext.updateLoggers(); // apply the changes
}
/**
* Disables all log4j2 ConsoleAppender's by modifying log4j configuration dynamically.
* Must only be used during early startup
* @return true if ok or else false if something happened, e.g. log4j2 classes were not in classpath
*/
@SuppressForbidden(reason = "Legitimate log4j2 access")
public static boolean muteConsole() {
try {
if (!isLog4jActive()) {
logNotSupported("Could not mute logging to console.");
return false;
}
LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
Configuration config = ctx.getConfiguration();
LoggerConfig loggerConfig = config.getLoggerConfig(LogManager.ROOT_LOGGER_NAME);
Map<String, Appender> appenders = loggerConfig.getAppenders();
appenders.forEach((name, appender) -> {
if (appender instanceof ConsoleAppender) {
loggerConfig.removeAppender(name);
ctx.updateLoggers();
}
});
return true;
} catch (Exception e) {
logNotSupported("Could not mute logging to console.");
return false;
}
}
private static Logger configureLog4j() {
LoggerContext context = (LoggerContext) LogManager.getContext();
Configuration config = context.getConfiguration();
PatternLayout layout = PatternLayout.createLayout("%m%n", null, null, Charset.defaultCharset(), false, false, null, null);
Appender appender = ConsoleAppender.createAppender(layout, null, null, "CONSOLE_APPENDER", null, null);
appender.start();
AppenderRef ref = AppenderRef.createAppenderRef("CONSOLE_APPENDER", null, null);
AppenderRef[] refs = new AppenderRef[]{ref};
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.INFO, "CONSOLE_LOGGER", "com", refs, null, null, null);
loggerConfig.addAppender(appender, null, null);
config.addAppender(appender);
config.addLogger("Main.class", loggerConfig);
context.updateLoggers(config);
return LogManager.getContext().getLogger("Main.class");
}
private static Logger configureLog4j() {
LoggerContext context = (LoggerContext) LogManager.getContext();
Configuration config = context.getConfiguration();
PatternLayout layout = PatternLayout.createLayout("%m%n", null, null, Charset.defaultCharset(), false, false, null, null);
Appender appender = ConsoleAppender.createAppender(layout, null, null, "CONSOLE_APPENDER", null, null);
appender.start();
AppenderRef ref = AppenderRef.createAppenderRef("CONSOLE_APPENDER", null, null);
AppenderRef[] refs = new AppenderRef[]{ref};
LoggerConfig loggerConfig = LoggerConfig.createLogger("false", Level.INFO, "CONSOLE_LOGGER", "com", refs, null, null, null);
loggerConfig.addAppender(appender, null, null);
config.addAppender(appender);
config.addLogger("Main.class", loggerConfig);
context.updateLoggers(config);
return LogManager.getContext().getLogger("Main.class");
}
@Test
public void givenDefaultLog4j2Environment_whenProgrammaticallyConfigured_thenLogsCorrectly() {
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
AppenderComponentBuilder console = builder.newAppender("Stdout", "CONSOLE")
.addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
console.add(builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
builder.add(console);
builder.add(builder.newLogger("com", Level.DEBUG)
.add(builder.newAppenderRef("Stdout"))
.addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ERROR)
.add(builder.newAppenderRef("Stdout")));
Configurator.initialize(builder.build());
LogPrinter logPrinter = new LogPrinter();
logPrinter.printlog();
}
private <T extends Log4j1Configuration> Appender createAppender(String name, Layout layout, Filter filter,
String level, String target, T configuration) {
org.apache.logging.log4j.core.Layout<?> consoleLayout = null;
if (layout instanceof LayoutWrapper) {
consoleLayout = ((LayoutWrapper) layout).getLayout();
} else if (layout != null) {
consoleLayout = new LayoutAdapter(layout);
}
org.apache.logging.log4j.core.Filter consoleFilter = buildFilters(level, filter);
ConsoleAppender.Target consoleTarget = SYSTEM_ERR.equals(target)
? ConsoleAppender.Target.SYSTEM_ERR : ConsoleAppender.Target.SYSTEM_OUT;
return new AppenderWrapper(ConsoleAppender.newBuilder()
.setName(name)
.setTarget(consoleTarget)
.setLayout(consoleLayout)
.setFilter(consoleFilter)
.setConfiguration(configuration)
.build());
}
/**
* Constructor to create the default configuration.
*/
public CustomConfiguration(final LoggerContext loggerContext, final ConfigurationSource source) {
super(loggerContext, source);
setName(CONFIG_NAME);
final Layout<? extends Serializable> layout = PatternLayout.newBuilder()
.setPattern(DEFAULT_PATTERN)
.setConfiguration(this)
.build();
final Appender appender = ConsoleAppender.createDefaultAppenderForLayout(layout);
appender.start();
addAppender(appender);
final LoggerConfig root = getRootLogger();
root.addAppender(appender, null, null);
final String levelName = PropertiesUtil.getProperties().getStringProperty(DEFAULT_LEVEL);
final Level level = levelName != null && Level.valueOf(levelName) != null ?
Level.valueOf(levelName) : Level.ERROR;
root.setLevel(level);
}
protected void setToDefault() {
// LOG4J2-1176 facilitate memory leak investigation
setName(DefaultConfiguration.DEFAULT_NAME + "@" + Integer.toHexString(hashCode()));
final Layout<? extends Serializable> layout = PatternLayout.newBuilder()
.setPattern(DefaultConfiguration.DEFAULT_PATTERN)
.setConfiguration(this)
.build();
final Appender appender = ConsoleAppender.createDefaultAppenderForLayout(layout);
appender.start();
addAppender(appender);
final LoggerConfig rootLoggerConfig = getRootLogger();
rootLoggerConfig.addAppender(appender, null, null);
final Level defaultLevel = Level.ERROR;
final String levelName = PropertiesUtil.getProperties().getStringProperty(DefaultConfiguration.DEFAULT_LEVEL,
defaultLevel.name());
final Level level = Level.valueOf(levelName);
rootLoggerConfig.setLevel(level != null ? level : defaultLevel);
}
@Test
public void testBuilder() throws Exception {
final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.ERROR);
builder.setConfigurationName("BuilderTest");
builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
.addAttribute("level", Level.DEBUG));
final AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target",
ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout").
addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY,
Filter.Result.NEUTRAL).addAttribute("marker", "FLOW"));
builder.add(appenderBuilder);
builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG).
add(builder.newAppenderRef("Stdout")).
addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
ctx = Configurator.initialize(builder.build());
final Configuration config = ctx.getConfiguration();
assertNotNull("No configuration", config);
assertEquals("Unexpected Configuration", "BuilderTest", config.getName());
assertThat(config.getAppenders(), hasSize(equalTo(1)));
}
private void addTestFixtures(final String name, final ConfigurationBuilder<BuiltConfiguration> builder) {
builder.setConfigurationName(name);
builder.setStatusLevel(Level.ERROR);
builder.setShutdownTimeout(5000, TimeUnit.MILLISECONDS);
builder.add(builder.newScriptFile("target/test-classes/scripts/filter.groovy").addIsWatched(true));
builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
.addAttribute("level", Level.DEBUG));
final AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout").
addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY,
Filter.Result.NEUTRAL).addAttribute("marker", "FLOW"));
builder.add(appenderBuilder);
builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG, true).
add(builder.newAppenderRef("Stdout")).
addAttribute("additivity", false));
builder.add(builder.newLogger("org.apache.logging.log4j.core").
add(builder.newAppenderRef("Stdout")));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
builder.addProperty("MyKey", "MyValue");
builder.add(builder.newCustomLevel("Panic", 17));
builder.setPackages("foo,bar");
}
public static Configuration addTestFixtures(final String name, final ConfigurationBuilder<BuiltConfiguration> builder) {
builder.setConfigurationName(name);
builder.setStatusLevel(Level.ERROR);
builder.add(builder.newScriptFile("target/test-classes/scripts/filter.groovy").addIsWatched(true));
builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
.addAttribute("level", Level.DEBUG));
final AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.
newLayout("PatternLayout").
addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
appenderBuilder.add(builder.
newFilter("MarkerFilter", Filter.Result.DENY, Filter.Result.NEUTRAL).
addAttribute("marker", "FLOW"));
builder.add(appenderBuilder);
builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG, true).
add(builder.newAppenderRef("Stdout")).
addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
builder.add(builder.newCustomLevel("Panic", 17));
return builder.build();
}
private ConfigurationBuilder<BuiltConfiguration> buildConfigurationBuilder(final String filePattern) {
final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setConfigurationName("LOG4J2-1964 demo");
builder.setStatusLevel(Level.ERROR);
// @formatter:off
builder.add(builder.newAppender("consoleLog", "Console")
.addAttribute("target", ConsoleAppender.Target.SYSTEM_ERR));
builder.add(builder.newAppender("fooAppender", "RollingFile")
.addAttribute("fileName", "target/rolling-update-date/foo.log")
.addAttribute("filePattern", filePattern)
.addComponent(builder.newComponent("SizeBasedTriggeringPolicy")
.addAttribute("size", "10MB")));
builder.add(builder.newRootLogger(Level.INFO)
.add(builder.newAppenderRef("consoleLog"))
.add(builder.newAppenderRef("fooAppender")));
// @formatter:on
return builder;
}
public void start(LogConfig abyLogConfig) {
//为false时,返回多个LoggerContext对象, true:返回唯一的单例LoggerContext
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
org.apache.logging.log4j.core.Logger cfgLogger = (org.apache.logging.log4j.core.Logger) LogManager.getLogger(abyLogConfig.getCfgLogName());
if (cfgLogger == null) {
LogManager.getLogger(LogFactory.class).error("not found {} logger (please define in log4j2.xml)", abyLogConfig.getCfgLogName());
return;
}
List<AppenderRef> appenderRefs = new ArrayList<>();
Map<String, Appender> appenderMap = cfgLogger.getAppenders();
List<Appender> appenders = new ArrayList<>();
appenderMap.forEach((key, appenderCfg) -> {
Appender appender;
if (appenderCfg instanceof ConsoleAppender) {
appender = appenderCfg;
} else {
appender = getAppender(abyLogConfig, config, appenderCfg);
}
if (appender != null) {
AppenderRef ref = AppenderRef.createAppenderRef(appender.getName(), Level.ALL, null);
appenderRefs.add(ref);
appenders.add(appender);
}
});
if (CollectionUtils.isEmpty(appenders)) {
return;
}
AppenderRef[] refs = new AppenderRef[appenderRefs.size()];
refs = appenderRefs.toArray(refs);
LoggerConfig loggerConfig = LoggerConfig.createLogger(false, cfgLogger.getLevel(), abyLogConfig.getName(),
"true", refs, null, config, null);
appenders.stream().forEach(e ->
loggerConfig.addAppender(e, Level.ALL, null)
);
config.addLogger(abyLogConfig.getName(), loggerConfig);
ctx.updateLoggers(config);
}
public void start(Logger cfgLogger, String clKey) {
//为false时,返回多个LoggerContext对象, true:返回唯一的单例LoggerContext
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
List<AppenderRef> appenderRefs = new ArrayList<>();
Map<String, Appender> appenderMap = ((org.apache.logging.log4j.core.Logger) cfgLogger).getAppenders();
List<Appender> appenders = new ArrayList<>();
appenderMap.forEach((key, appenderCfg) -> {
Appender appender;
if (appenderCfg instanceof ConsoleAppender) {
appender = appenderCfg;
} else {
appender = getAppender(clKey, config, appenderCfg);
}
if (appender != null && appender.isStopped()) {
appender.start();
}
if (appender != null) {
AppenderRef ref = AppenderRef.createAppenderRef(appender.getName(), Level.ALL, null);
appenderRefs.add(ref);
appenders.add(appender);
}
});
if (CollectionUtils.isEmpty(appenders)) {
return;
}
AppenderRef[] refs = new AppenderRef[appenderRefs.size()];
refs = appenderRefs.toArray(refs);
LoggerConfig loggerConfig = LoggerConfig.createLogger(false, cfgLogger.getLevel(), clKey, "true", refs, null, config, null);
appenders.stream().forEach(e ->
loggerConfig.addAppender(e, Level.ALL, null)
);
config.addLogger(clKey, loggerConfig);
ctx.updateLoggers(config);
}
protected Logger setupLogger() {
AnsiConsole.systemInstall();
final java.util.logging.Logger global = java.util.logging.Logger.getLogger("");
global.setUseParentHandlers(false);
final Handler[] handlers = global.getHandlers();
for (int i = 0; i < handlers.length; ++i) {
global.removeHandler(handlers[i]);
}
global.addHandler(new ForwardLogHandler());
org.apache.logging.log4j.Logger logger = LogManager.getRootLogger();
if (logger instanceof org.apache.logging.log4j.core.Logger) {
final Iterator<org.apache.logging.log4j.core.Appender> appenders =
((org.apache.logging.log4j.core.Logger) logger).getAppenders().values().iterator();
while (appenders.hasNext()) {
final org.apache.logging.log4j.core.Appender appender = appenders.next();
if (appender instanceof ConsoleAppender) {
((org.apache.logging.log4j.core.Logger) logger).removeAppender(appender);
}
}
}
new Thread(new TerminalConsoleWriterThread(System.out, reader)).start();
System.setOut(new PrintStream(new LoggerOutputStream(logger, Level.INFO), true));
System.setErr(new PrintStream(new LoggerOutputStream(logger, Level.WARN), true));
BasicConfigurator.resetConfiguration();
try {
return (Logger) PGMServer.class.getField("LOGGER").get(PGMServer.class);
} catch (IllegalAccessException | NoSuchFieldException e) {
// No-op
}
return logger;
}
@Test
void testSoutPlainText() {
Configuration configuration = getLogConfig(Map.of("ship_agent_logs", "false"));
assertThat(configuration.getAppenders().values()).hasSize(1);
Appender appender = configuration.getAppenders().values().iterator().next();
assertThat(appender).isInstanceOf(ConsoleAppender.class);
assertThat(appender.getLayout()).isInstanceOf(PatternLayout.class);
}
@Test
void testSoutJson() {
Configuration configuration = getLogConfig(Map.of("ship_agent_logs", "false", "log_format_sout", "JSON"));
assertThat(configuration.getAppenders().values()).hasSize(1);
Appender appender = configuration.getAppenders().values().iterator().next();
assertThat(appender).isInstanceOf(ConsoleAppender.class);
assertThat(appender.getLayout()).isInstanceOf(EcsLayout.class);
}
private Configuration createConfiguration(final String name, ConfigurationBuilder<BuiltConfiguration> builder) {
builder.setConfigurationName(name);
builder.setStatusLevel(Level.ERROR);
builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL).addAttribute("level", level()));
if (isConsoleAppenderEnabled()) {
AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout").addAttribute("pattern", "%d [%t] %-5level: %msg [%c][%X{msgId}]%n%throwable"));
appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY, Filter.Result.NEUTRAL).addAttribute("marker", "FLOW"));
builder.add(appenderBuilder);
}
builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG).add(builder.newAppenderRef("Stdout")).addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
return builder.build();
}
private static List<Map<String, Object>> doGetLoggerAppenders(LoggerConfig loggerConfig) {
List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
Map<String, Appender> appenders = loggerConfig.getAppenders();
for (Entry<String, Appender> entry : appenders.entrySet()) {
Map<String, Object> info = new HashMap<String, Object>();
Appender appender = entry.getValue();
info.put(LoggerHelper.name, appender.getName());
info.put(LoggerHelper.clazz, appender.getClass());
result.add(info);
if (appender instanceof FileAppender) {
info.put(LoggerHelper.file, ((FileAppender) appender).getFileName());
} else if (appender instanceof ConsoleAppender) {
info.put(LoggerHelper.target, ((ConsoleAppender) appender).getTarget());
} else if (appender instanceof AsyncAppender) {
AsyncAppender asyncAppender = ((AsyncAppender) appender);
String[] appenderRefStrings = asyncAppender.getAppenderRefStrings();
info.put(LoggerHelper.blocking, asyncAppender.isBlocking());
info.put(LoggerHelper.appenderRef, Arrays.asList(appenderRefStrings));
}
}
return result;
}
private void configureAppender(LoggerContext loggerContext, Level level) {
final LoggerConfig rootConfig = loggerContext.getConfiguration().getRootLogger();
for (Appender appender : rootConfig.getAppenders().values()) {
if (appender instanceof ConsoleAppender) {
rootConfig.removeAppender(appender.getName());
rootConfig.addAppender(appender, level, null);
}
}
if (rootConfig.getLevel().isMoreSpecificThan(level)) {
rootConfig.setLevel(level);
}
loggerContext.updateLoggers();
}
public static LoggerContext initializeLog4j() {
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.ERROR); // show internal log4j2 errors
builder.setConfigurationName("QuickAndDirtySetup");
AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE")
.addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
builder.add(appenderBuilder);
//builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG)
// .add(builder.newAppenderRef("Stdout")).addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout").addAttribute("level", Level.WARN)));
return Configurator.initialize(builder.build());
}
public static LoggerContext initializeLog4j() {
ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
builder.setStatusLevel(Level.ERROR); // show internal log4j2 errors
builder.setConfigurationName("QuickAndDirtySetup");
AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE")
.addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout")
.addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
builder.add(appenderBuilder);
//builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG)
// .add(builder.newAppenderRef("Stdout")).addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout").addAttribute("level", Level.WARN)));
return Configurator.initialize(builder.build());
}
public static Logger initializeDefaultLogger(Level level, Class<?> clazz) {
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
final ConsoleAppender appender = ConsoleAppender.newBuilder().setName("Console").build();
config.addAppender(appender);
final AppenderRef ref = AppenderRef.createAppenderRef("Console", level, null);
final AppenderRef[] refs = new AppenderRef[] {ref};
final LoggerConfig loggerConfig =
LoggerConfig.createLogger(true, level, clazz.getName(), null, refs, null, config, null);
config.addLogger(clazz.getName(), loggerConfig);
ctx.updateLoggers();
return LogManager.getLogger(clazz);
}
private void addTestFixtures(final String name, final ConfigurationBuilder<BuiltConfiguration> builder) {
builder.setConfigurationName(name);
builder.setStatusLevel(Level.ERROR);
builder.setShutdownTimeout(5000, TimeUnit.MILLISECONDS);
builder.add(builder.newScriptFile("target/test-classes/scripts/filter.groovy").addIsWatched(true));
builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
.addAttribute("level", Level.DEBUG));
final AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout").
addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY,
Filter.Result.NEUTRAL).addAttribute("marker", "FLOW"));
builder.add(appenderBuilder);
final AppenderComponentBuilder appenderBuilder2 = builder.newAppender("Pulsar", "Pulsar")
.addAttribute("serviceUrl", "pulsar://localhost:6650")
.addAttribute("topic", "my-topic");
appenderBuilder2.add(builder.newLayout("GelfLayout").
addAttribute("host", "my-host").
addComponent(builder.newKeyValuePair("extraField", "extraValue")));
builder.add(appenderBuilder2);
builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG, true).
add(builder.newAppenderRef("Stdout")).
addAttribute("additivity", false));
builder.add(builder.newLogger("org.apache.logging.log4j.core", Level.DEBUG).
add(builder.newAppenderRef("Stdout")));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
builder.addProperty("MyKey", "MyValue");
builder.add(builder.newCustomLevel("Panic", 17));
builder.setPackages("foo,bar");
}
static Configuration addTestFixtures(final String name, final ConfigurationBuilder<BuiltConfiguration> builder) {
builder.setConfigurationName(name);
builder.setStatusLevel(Level.ERROR);
builder.add(builder.newScriptFile("target/test-classes/scripts/filter.groovy").addIsWatched(true));
builder.add(builder.newFilter("ThresholdFilter", Filter.Result.ACCEPT, Filter.Result.NEUTRAL)
.addAttribute("level", Level.DEBUG));
final AppenderComponentBuilder appenderBuilder = builder.newAppender("Stdout", "CONSOLE").addAttribute("target", ConsoleAppender.Target.SYSTEM_OUT);
appenderBuilder.add(builder.newLayout("PatternLayout").
addAttribute("pattern", "%d [%t] %-5level: %msg%n%throwable"));
appenderBuilder.add(builder.newFilter("MarkerFilter", Filter.Result.DENY,
Filter.Result.NEUTRAL).addAttribute("marker", "FLOW"));
builder.add(appenderBuilder);
final AppenderComponentBuilder appenderBuilder2 = builder.newAppender("Pulsar", "Pulsar")
.addAttribute("serviceUrl", "pulsar://localhost:6650")
.addAttribute("topic", "my-topic");
appenderBuilder2.add(builder.newLayout("GelfLayout").
addAttribute("host", "my-host").
addComponent(builder.newKeyValuePair("extraField", "extraValue")));
builder.add(appenderBuilder2);
builder.add(builder.newLogger("org.apache.logging.log4j", Level.DEBUG, true).
add(builder.newAppenderRef("Stdout")).
addAttribute("additivity", false));
builder.add(builder.newRootLogger(Level.ERROR).add(builder.newAppenderRef("Stdout")));
builder.add(builder.newCustomLevel("Panic", 17));
return builder.build();
}
/**
* Creates console appender with some reasonable default logging settings.
*
* @return Logger with auto configured console appender.
*/
public Logger createConsoleLogger() {
// from http://logging.apache.org/log4j/2.x/manual/customconfig.html
final LoggerContext ctx = impl.getContext();
final Configuration cfg = ctx.getConfiguration();
PatternLayout.Builder builder = PatternLayout.newBuilder()
.withPattern("%d{ISO8601}][%-5p][%t][%c{1}] %m%n")
.withCharset(Charset.defaultCharset())
.withAlwaysWriteExceptions(false)
.withNoConsoleNoAnsi(false);
PatternLayout layout = builder.build();
ConsoleAppender.Builder consoleAppenderBuilder = ConsoleAppender.newBuilder()
.withName(CONSOLE_APPENDER)
.withLayout(layout);
ConsoleAppender consoleApp = consoleAppenderBuilder.build();
consoleApp.start();
cfg.addAppender(consoleApp);
cfg.getRootLogger().addAppender(consoleApp, Level.TRACE, null);
ctx.updateLoggers(cfg);
return ctx.getRootLogger();
}
private ActorLogger() {
loggerContext = (LoggerContext) LogManager.getContext(LogManager.class.getClassLoader(), false);
Configuration config = loggerContext.getConfiguration();
Appender systemConsoleAppender = ConsoleAppender.newBuilder()
.setName(SYSTEM_CONSOLE_APPENDER_NAME)
.setLayout(PatternLayout.newBuilder().withPattern(LAYOUT_CONSOLE_SYSTEM).build())
.setConfiguration(config)
.build();
systemConsoleAppender.start();
AppenderRef[] systemAppenderRefs = new AppenderRef[]{AppenderRef.createAppenderRef(SYSTEM_CONSOLE_APPENDER_NAME, null, null)};
systemLoggerConfig = LoggerConfig.createLogger(false, Level.DEBUG, SYSTEM_LOGGER_NAME, "true", systemAppenderRefs, null, config, null);
systemLoggerConfig.addAppender(systemConsoleAppender, null, null);
Appender userConsoleAppender = ConsoleAppender.newBuilder()
.setName(USER_CONSOLE_APPENDER_NAME)
.setLayout(PatternLayout.newBuilder().withPattern(LAYOUT_CONSOLE_USER).build())
.setConfiguration(config)
.build();
userConsoleAppender.start();
AppenderRef[] userAppenderRefs = new AppenderRef[]{AppenderRef.createAppenderRef(USER_CONSOLE_APPENDER_NAME, null, null)};
userLoggerConfig = LoggerConfig.createLogger(false, Level.DEBUG, USER_LOGGER_NAME, "true", userAppenderRefs, null, config, null);
userLoggerConfig.addAppender(userConsoleAppender, null, null);
config.addAppender(systemConsoleAppender);
config.addAppender(userConsoleAppender);
config.addLogger(SYSTEM_LOGGER_NAME, systemLoggerConfig);
config.addLogger(USER_LOGGER_NAME, userLoggerConfig);
loggerContext.updateLoggers(config);
}
public static void appendSimplifiedConsoleLogger(Level level) {
final LoggerContext ctx = (LoggerContext) LogManager.getContext(false);
final Configuration config = ctx.getConfiguration();
Layout layout = PatternLayout.createLayout("%msg%n", null, config, null, null, true, false, null, null);
Appender appender = ConsoleAppender.createAppender(layout, null, ConsoleAppender.Target.SYSTEM_OUT, "stdout", true, true);
appender.start();
config.getRootLogger().addAppender(appender, level, null);
ctx.updateLoggers();
}