Почему ConsoleAppender выбрасывает "нет потока вывода или файла для приложения с именем [null]"?
У меня проблема с log4j ConsoleAppender
:
Если я инициализирую это так:
ConsoleAppender ca = new ConsoleAppender();
ca.setLayout(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN));
это дает ошибку и прерывает регистрацию.
Ошибка вывода:
log4j: ОШИБКА Нет выходного потока или набора файлов для приложения с именем [null].
Если я инициализирую его так, он работает нормально:
ConsoleAppender ca = new ConsoleAppender(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN));
Кто-нибудь сталкивался с этой проблемой? Я не могу найти его в репозитории Bugzilla, но если бы это было эффективно, это было бы совершенно очевидно!
Возможно я смотрю не в том месте?
Соответствующий код:
import org.apache.log4j.*;
public class ConsoleAppenderIssue {
private static Logger logger = Logger.getLogger(ConsoleAppenderIssue.class);
public static void main(String [] args) {
ConsoleAppender ca = new ConsoleAppender();
ca.setLayout(new PatternLayout(PatternLayout.TTCC_CONVERSION_PATTERN));
logger.addAppender(ca);
logger.info("log something");
}
}
1 ответ
Вы можете понять, почему это происходит, если вы посмотрите на источник для ConsoleAppender:
public ConsoleAppender(Layout layout) {
this(layout, SYSTEM_OUT);
}
public ConsoleAppender(Layout layout, String target) {
setLayout(layout);
setTarget(target);
activateOptions();
}
Ты это видишь ConsoleAppender(Layout)
проходит SYSTEM_OUT
как цель, а также то, что она вызывает activateOptions
после настройки макета и цели.
Если вы используете setLayout
сами, тогда вам также нужно будет явно установить цель и вызвать activateOptions
,