Я изучаю JAVA и сегодня играю с Logback. В качестве упражнения для себя я написал пользовательский «appender» для записи журналов (для Spring) в коллекцию MongoDB. После отслеживания ошибки я обнаружил, что если мой appender генерирует исключение, то это просто игнорируется, и приложение продолжает работать, но с данным регистратором, о котором идет речь, теперь умер.Исключительное игнорирование внутреннего исключения логина
место генерируется исключение:
public class MongoDBAppender extends AppenderBase<ILoggingEvent> {
...
protected void append(ILoggingEvent event) {
...
throw new RuntimeException("My example exception!");
Как я хочу открыть одну сессию MongoDB в самом начале, а затем начать регистрацию, а затем получить Spring собирается, программно установить этот Appender Собирается:
MongoClient mongoClient = new MongoClient("localhost:27017");
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
PatternLayoutEncoder ple = new PatternLayoutEncoder();
ple.setContext(lc);
ple.setPattern("%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n");
ple.start();
MongoDBAppender mongoDBAppender = new MongoDBAppender();
mongoDBAppender.setContext(lc);
mongoDBAppender.setEncoder(ple);
mongoDBAppender.setmongoDBName("test");
mongoDBAppender.setmongoDBCollectionName("my_log");
mongoDBAppender.start();
Logger logger = (Logger) LoggerFactory.getLogger("org.springframework");
logger.addAppender(mongoDBAppender);
logger.setLevel(Level.INFO);
logger.setAdditive(false);
Другие регистраторы определяются как обычно в logback.xml
.
Итак, как есть, это приложение работает правильно, но ничего не регистрируется для org.springframework
. Если изменить файл logback.xml
начать как:
<configuration debug="true">
тогда я получаю полный отладочный вывод из самого Logback, да и то я вижу мое исключение бросают.
Есть ли способ получить этот вид вывода тогда и только тогда, когда есть ошибка?