public static ConsoleAppender createDefaultAppenderForLayout(final Layout<? extends Serializable> layout) { // this method cannot use the builder class without introducing an infinite loop due to DefaultConfiguration return new ConsoleAppender("DefaultConsole-" + COUNT.incrementAndGet(), layout, null, getDefaultManager(DEFAULT_TARGET, false, false, layout), true, DEFAULT_TARGET); }
/** * Enumeration of console destinations. */ public enum Target { /** Standard output. */ SYSTEM_OUT { @Override public Charset getDefaultCharset() { return getCharset("sun.stdout.encoding", Charset.defaultCharset()); } }, /** Standard error output. */ SYSTEM_ERR { @Override public Charset getDefaultCharset() { return getCharset("sun.stderr.encoding", Charset.defaultCharset()); } }; public abstract Charset getDefaultCharset(); protected Charset getCharset(final String property, Charset defaultCharset) { return new PropertiesUtil(PropertiesUtil.getSystemProperties()).getCharsetProperty(property, defaultCharset); } }
final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true); final Target target = targetStr == null ? DEFAULT_TARGET : Target.valueOf(targetStr); return new ConsoleAppender(name, layout, filter, getManager(target, isFollow, false, layout), ignoreExceptions, target);
@Override public ConsoleAppender build() { if (follow && direct) { throw new IllegalArgumentException("Cannot use both follow and direct on ConsoleAppender '" + getName() + "'"); } final Layout<? extends Serializable> layout = getOrCreateLayout(target.getDefaultCharset()); return new ConsoleAppender(getName(), layout, getFilter(), getManager(target, follow, direct, layout), isIgnoreExceptions(), target); } }