Приложение файла Log4j2:
Вы определили Log4j2
Устройство файла ?
Таким образом, для входа в файл не потребуются какие-либо изменения в вашем файле. Java код. Может быть, вход в консоль может работать без него, но у меня в проекте root есть файл *1082*, который определяет, как Log4j2
должен регистрироваться.
Вот моя текущая версия с консолью appender и File appender определено:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%-5level %logger{36} - %msg%n"/>
</Console>
<File name="File" fileName="logs/app.log">
<PatternLayout pattern="%-5level %logger{36} - %msg%n"/>
</File>
</Appenders>
<Loggers>
<Root level="TRACE">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>
Могут быть и другие способы достижения того же результата. Загляните на страницу конфигурации Logj42 .
Если хотите, ознакомьтесь с другими типами доступных дополнений здесь . Если вас не устраивает способ отображения сообщений журнала, вы можете прочитать о Схемах шаблонов .
Исключения при регистрации:
Вы спрашивали об ошибках при регистрации и похоже, что он успешно может регистрировать общие записи в журнале.
Вам просто нужно обернуть ваш код в try-catch .
Например:
try {
logger.info("Hello world");
// I want to test my exception handling
throw new RuntimeException("Triggering an error");
} catch (Exception e) {
String errorMessage = "An error has occurred";
logger.error(errorMessage, e);
throw new RuntimeException(errorMessage, e);
}
Обратите внимание, что я ловлю Exception и выбрасываю RuntimeException . Exception
является проверенным исключением - поэтому вызывающему коду необходимо его перехватить, а RuntimeException
(подкласс Exception
) - непроверенное исключение. Поэтому, выбрасывая RuntimeException
, я намекаю на то, что произошло что-то совершенно неожиданное и что вызывающий код не будет знать, как с этим справиться - поэтому им не нужно catch
это делать, и поскольку это не проверяется исключение, которое им не понадобится.
Таким образом, в предложении catch
вы можете, в зависимости от ваших требований, сгенерировать Exception
или RuntimeException
, или ваше собственное пользовательское исключение, которое может быть либо проверенное исключение (подкласс Exception
) или непроверенное исключение (подкласс RuntimeException
).
Если вы не выбросите Exception
из предложения catch
, код будет продолжить выполнение после пункта catch
, что, скорее всего, не то, что вам нужно.
Я вижу, что ваш код находится внутри метода public static void main(String args[])
. Поэтому, возможно, вам не нужно выбрасывать Exception
из предложения catch
, поскольку выполнение программы в любом случае остановится после предложения catch
, если предложение catch
находится в конце метода. Возможно, Java напечатает что-то на консоли, если вы выбросите что-то из этого метода - но это не будет перехвачено и записано Log4j2
.
Ведение журнала с аспектами:
Я вижу, вы можете войти, используя аспекты. См. Например здесь . Тем не менее, я просто попытаюсь заставить все работать с try-catch
. Мне не приходилось использовать аспекты для ведения журнала, и мне кажется, что это немного работы для выгоды, которая не слишком ясна, поэтому я, к сожалению, не могу помочь с этим.
Надеюсь, что остальная часть моего ответа было полезно:)