Используя простое имя класса в форматере журналирования java - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть SimpleFormatter для входа в мое приложение со строкой
"%1$tF %1$tT %4$-7s %2$s %5$s%6$s%n"

Я хотел бы использовать простое имя класса, а не каноническое имя.Можно ли использовать форматирование с полем 2 $?Или это требует написания нового обработчика?

Например, вместо
2019-02-06 07:09:09 INFO simplex.tools.SIMPLEXScheduler main Start

Я бы хотел увидеть
2019-02-06 07:09:09 INFO SIMPLEXScheduler main Start

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Я написал собственный форматтер, как предложено jmehrens .Если мне нужно что-то более сложное, я могу попробовать перейти на другой фреймворк, такой как log4j, но сейчас я делаю то, что хочу.Спасибо за совет!

                Formatter formatter = new Formatter() {
                    @Override
                    public String format(LogRecord record) {
                        String source = "";
                        if (record.getSourceClassName() != null) {
                            try {
                                source = Class.forName(record.getSourceClassName()).getSimpleName();
                            } catch (ClassNotFoundException e) {
                                e.printStackTrace();
                            }
                            if (record.getSourceMethodName() != null) {
                                source += " " + record.getSourceMethodName();
                            }
                        } else {
                            source = record.getLoggerName();
                        }
                        String message = formatMessage(record);
                        String throwable = "";
                        if (record.getThrown() != null) {
                            StringWriter sw = new StringWriter();
                            PrintWriter pw = new PrintWriter(sw);
                            pw.println();
                            record.getThrown().printStackTrace(pw);
                            pw.close();
                            throwable = sw.toString();
                        }
                        return String.format(getLogFormat(), new Date(record.getMillis()), source,
                                record.getLoggerName(), record.getLevel(), message, throwable);
                    }

                };
0 голосов
/ 08 февраля 2019

Есть ли опция формата, которую я могу использовать с полем 2 $?

SimpleFormatter поддерживает функциональность только в java.util.Formatter .В настоящее время нет способа отформатировать имя класса как простое имя класса.

Или это требует написания нового обработчика?

Один из вариантов - написать новое java.util.logging.Formatter .Есть несколько способов, которые вы можете сделать, просто установив java.util.logging.Filter , чтобы изменить имя класса , но вам следует избегать этого.Используйте logp вместо этого, как предложено PJMeisch

Отказ от ответственности: Я разработчик контента для com.sun.mail.util.logging пакет включен в проект JavaMail .

Если у вас есть доступ к JavaMail, вы можете использовать com.sun.mail.util.logging.CompactFormatter который будет печатать только простое имя класса.Компромисс в том, что он напечатает трассировки компактных стеков для исключений.Аргументы с 1 по 6 имеют тот же порядок, что и SimpleFormatter, поэтому можно использовать тот же шаблон.

Если вы не хотите включать JavaMail, вы можете использовать com.sun.mail: logging-mailhandler артефакт вместо.

...