Search code examples
springtomcatfeign

Modify Feign log behavior for specific exceptions


I have a spring controller that returns a custom-made exception. However, I don't want that specific exception to cause a "Log.Error()" Unfortunately, Feign logs it that way automatically.

Is there any way to change this behavior?

Thanks.


Solution

  • Apparently, it wasn't Feign that was the problem, but the embedded Tomcat that did the log writing.

    We were able to add a "TurboFilter" to the Logger to prevent that specific exception from making its' way to our logs:

    import ch.qos.logback.classic.Level;
    import ch.qos.logback.classic.Logger;
    import ch.qos.logback.classic.turbo.TurboFilter;
    
    // o.a.c.c.C is the name of the Apache Tomcat logger
    Logger root = (Logger) LoggerFactory.getLogger("o.a.c.c.C");
    root.getLoggerContext().addTurboFilter(new TurboFilter() {
        @Override
        public FilterReply decide(Marker marker, Logger logger, Level level, String format, Object[] params, Throwable t) {
            if(null != t && t instanceof OurCustomException) {
                return FilterReply.DENY;
            }
    
            return FilterReply.ACCEPT;
        }
    });