Обработка и ведение журнала ошибок движка Spring + Thymeleaf - PullRequest
0 голосов
/ 01 марта 2019

Наша компания находится в процессе перехода нашего движка шаблонов с Velocity на Thymeleaf.Мы используем Splunk для нашего ведения журнала, и с помощью Velocity мы смогли реализовать org.apache.velocity.runtime.log.LogChute для обработки пользовательского ведения журнала (форматирование и запись в наш разделенный журнал), но мне не удалось найти аналогичный класс для Thymeleaf.

Я пробовал пару подходов до сих пор.Сначала я попытался расширить действующий движок Thymeleaf и добавить оболочку try / catch для метода процесса, но, к сожалению, этот метод является окончательным.Я видел предложение добавить фильтр для перехвата ошибок тимелина, но что-то должно поглотить ошибку, потому что она никогда не достигает этого блока перехвата.

Единственный вариант, который я могу придумать, это просто потянутьorg.thymeleaf.TemplateEngine входит в наш разделенный журнал, но тогда он не будет правильно отформатирован для приема внутрь, и я не могу добавить какие-либо настраиваемые поля.

У кого-нибудь есть идеи?

РЕДАКТИРОВАТЬ:

Ничего себе, поэтому я просто повторил подход Filter, и он сработал, но перехваченное исключение было org.springframework.web.util.NestedServletException, поэтому JRebel не должен был перезагружать мои изменения, чтобы поймать Exception вместо TemplateEngineException при попыткепоследний.

Тем не менее, если у кого-то есть лучший подход, я хотел бы услышать это.Я новичок во всем вопросе публикации сообщения;я должен опубликовать ответ?

1 Ответ

0 голосов
/ 04 марта 2019

Подход фильтра в конечном итоге сработал, но TemplateEngineException обернулся NestedServletException.

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

import org.springframework.web.util.NestedServletException;
import org.thymeleaf.exceptions.TemplateEngineException;

/**
 * Filter to catch Thymeleaf template errors
 */
public class ThymeleafErrorFilter implements Filter {

    @Override
    public void init(final FilterConfig filterConfig) {

    }

    @Override
    public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
        try {
            filterChain.doFilter(servletRequest, servletResponse);
        } catch (final NestedServletException nse) {
            if(nse.getCause() instanceof TemplateEngineException) {
                //Do stuff here
                ...
            }

            throw nse;
        }
    }

    @Override
    public void destroy() {
    }
}

И затем зарегистрировал фильтр

    /**
     * @return thymeleaf error filter
     */
    @Bean
    public FilterRegistrationBean thymeleafErrorFilter() {
        FilterRegistrationBean thymeleafErrorFilter = new FilterRegistrationBean();
        thymeleafErrorFilter.setName("thymeleafErrorFilter");
        thymeleafErrorFilter.setFilter(new ThymeleafErrorFilter());
        thymeleafErrorFilter.addUrlPatterns("/*");
        return thymeleafErrorFilter;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...