Как создать новый log4j ConsoleAppender в коде вместо конфигурации?

Я хочу программно создать новый log4j ConsoleAppender и добавить его в качестве приложения к журналу - как мне это сделать, чтобы создать экземпляр правильно - использование следующего, кажется, делает log4j жалобой - какие сеттеры мне нужно использовать для его настройки правильно?

// log4j complains of "No output stream or file set for the appender named [null]."
logger.addAppender(new ConsoleAppender());

Предположительно, это тот случай, когда вы знаете, что устанавливать на ConsoleAppender, но я не могу понять это. Я предполагаю, что есть способ получить макет по умолчанию. Мне просто нужен стандартный ConsoleAppender, который присоединяется к SysOut. Любое руководство оценили, спасибо.

Ответы

Ответ 1

Вам нужно будет установить Writer в appender (а затем также Layout, чтобы избежать следующей ошибки, которую вы увидите.) Это означает, что вы не можете использовать анонимный экземпляр, Вам нужно будет использовать настройки для настройки приложения. например.

ConsoleAppender ca = new ConsoleAppender();
ca.setWriter(new OutputStreamWriter(System.out));
ca.setLayout(new PatternLayout("%-5p [%t]: %m%n"));
logger.addAppender(ca);

Кроме того, вы можете установить имя приложения с помощью:

ca.setName("My appender");

Ответ 2

Кажется, это известный issue в log4j. Вы должны исправить это, вызвав activateOptions в приложении, прежде чем добавлять его в журнал или с помощью параметризованного конструктора для ConsoleAppender.

Какую версию вы используете? Кажется, что ошибка существует в довольно старой версии.