mirror of https://github.com/halo-dev/halo
				
				
				
			Turn off logging of TemplateEngine (#7284)
#### What type of PR is this? /kind bug /area core /milestone 2.20.x #### What this PR does / why we need it: This PR turns off the logging of TemplateEngine to prevent too many annoying and useless logs. Please note that the TemplateExceptions won't be eat up because we have a global error handler to log them. #### Which issue(s) this PR fixes: Fixes https://github.com/halo-dev/halo/issues/4468 #### Special notes for your reviewer: Steps to verify: - Start Halo instance - Execute command `ab -c 100 -n 10000 -H 'Accept: text/html' -H 'Cache-Control: no-cache' http://localhost:8090/` and then press `Ctrl + C` to stop the ab process. - See the logs of Halo instance. #### Does this PR introduce a user-facing change? ```release-note 解决日志中出现大量 InterruptedException 异常的问题 ```pull/7277/merge
							parent
							
								
									4ad97cd58e
								
							
						
					
					
						commit
						fed80f26f2
					
				| 
						 | 
				
			
			@ -1,7 +1,9 @@
 | 
			
		|||
package run.halo.app.theme.engine;
 | 
			
		||||
 | 
			
		||||
import java.nio.channels.ClosedByInterruptException;
 | 
			
		||||
import java.nio.charset.Charset;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.reactivestreams.Publisher;
 | 
			
		||||
import org.springframework.core.io.buffer.DataBuffer;
 | 
			
		||||
import org.springframework.core.io.buffer.DataBufferFactory;
 | 
			
		||||
| 
						 | 
				
			
			@ -9,6 +11,7 @@ import org.springframework.http.MediaType;
 | 
			
		|||
import org.thymeleaf.context.IContext;
 | 
			
		||||
import org.thymeleaf.messageresolver.IMessageResolver;
 | 
			
		||||
import org.thymeleaf.spring6.SpringWebFluxTemplateEngine;
 | 
			
		||||
import reactor.core.Exceptions;
 | 
			
		||||
import reactor.core.publisher.Flux;
 | 
			
		||||
import reactor.core.publisher.Mono;
 | 
			
		||||
import reactor.core.scheduler.Schedulers;
 | 
			
		||||
| 
						 | 
				
			
			@ -18,6 +21,7 @@ import reactor.core.scheduler.Schedulers;
 | 
			
		|||
 *
 | 
			
		||||
 * @author johnniang
 | 
			
		||||
 */
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class HaloTemplateEngine extends SpringWebFluxTemplateEngine {
 | 
			
		||||
 | 
			
		||||
    private final IMessageResolver messageResolver;
 | 
			
		||||
| 
						 | 
				
			
			@ -43,20 +47,22 @@ public class HaloTemplateEngine extends SpringWebFluxTemplateEngine {
 | 
			
		|||
        // while processing.
 | 
			
		||||
        if (publisher instanceof Mono<DataBuffer> mono) {
 | 
			
		||||
            return mono.subscribeOn(Schedulers.boundedElastic())
 | 
			
		||||
                // We should switch back to non-blocking thread.
 | 
			
		||||
                // See https://github.com/spring-projects/spring-framework/issues/26958
 | 
			
		||||
                // for more details.
 | 
			
		||||
                .publishOn(Schedulers.parallel());
 | 
			
		||||
                .doOnError(Exception.class, e -> this.logTemplateError(e, template));
 | 
			
		||||
        }
 | 
			
		||||
        if (publisher instanceof Flux<DataBuffer> flux) {
 | 
			
		||||
            return flux
 | 
			
		||||
                .subscribeOn(Schedulers.boundedElastic())
 | 
			
		||||
                // We should switch back to non-blocking thread.
 | 
			
		||||
                // See https://github.com/spring-projects/spring-framework/issues/26958
 | 
			
		||||
                // for more details.
 | 
			
		||||
                .publishOn(Schedulers.parallel());
 | 
			
		||||
            return flux.subscribeOn(Schedulers.boundedElastic())
 | 
			
		||||
                .doOnError(Exception.class, e -> this.logTemplateError(e, template));
 | 
			
		||||
        }
 | 
			
		||||
        return publisher;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void logTemplateError(Exception e, String template) {
 | 
			
		||||
        if (Exceptions.unwrap(e.getCause()) instanceof InterruptedException) {
 | 
			
		||||
            log.warn("Interrupted while processing template: {}", template);
 | 
			
		||||
        }
 | 
			
		||||
        if (e.getCause() instanceof ClosedByInterruptException) {
 | 
			
		||||
            log.warn("Interrupted while outputting template: {}", template);
 | 
			
		||||
        }
 | 
			
		||||
        // other exceptions will be caught by error handler
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,7 @@ halo:
 | 
			
		|||
logging:
 | 
			
		||||
  level:
 | 
			
		||||
    run.halo.app: DEBUG
 | 
			
		||||
    web: DEBUG
 | 
			
		||||
    org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler: DEBUG
 | 
			
		||||
springdoc:
 | 
			
		||||
  cache:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -57,6 +57,8 @@ springdoc:
 | 
			
		|||
  writer-with-order-by-keys: true
 | 
			
		||||
 | 
			
		||||
logging:
 | 
			
		||||
  level:
 | 
			
		||||
    org.thymeleaf.TemplateEngine: OFF
 | 
			
		||||
  file:
 | 
			
		||||
    name: ${halo.work-dir}/logs/halo.log
 | 
			
		||||
  logback:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue