복붙노트

[SPRING] 내 logback 자바 기반 (no xml) 구성이 무시됩니다.

SPRING

내 logback 자바 기반 (no xml) 구성이 무시됩니다.

로그백을 구성 하려는데 내 구성을 앱을 실행할 때 사용할 수 없습니다.

모든 구성을 제거하고 파일 출력이 없어도 콘솔 출력이 많으므로 콘솔 출력이 일부 기본 구성으로 완료되었다고 가정합니다.

지금까지 나의 구성은 다음과 같습니다.

@Configuration
public class Log4j {

    private final static String PATTERN = "%date %-5level [%thread] %logger{36} %m%n %rEx";

    @Bean 
    public static LoggerContext loggerContext() {
        return (LoggerContext) LoggerFactory.getILoggerFactory();
    }

    @Bean (initMethod = "start", destroyMethod = "stop")
    public static PatternLayoutEncoder encoder (LoggerContext ctx) {
        PatternLayoutEncoder encoder = new PatternLayoutEncoder();
        encoder.setContext(ctx);
        encoder.setPattern(PATTERN);
        return encoder;
    }

    @Bean (initMethod = "start", destroyMethod = "stop")
    public static ConsoleAppender consoleAppender (LoggerContext context, PatternLayoutEncoder encoder) {
        ConsoleAppender consoleAppender = new ConsoleAppender();
        consoleAppender.setContext(context);
        consoleAppender.setEncoder(encoder);
        return consoleAppender;
    }

    @Bean (initMethod = "start", destroyMethod = "stop")
    public static FileAppender fileAppender(LoggerContext context, PatternLayoutEncoder encoder) throws IOException {
        RollingFileAppender fileAppender = new RollingFileAppender();
        fileAppender.setContext(context);
        fileAppender.setEncoder(encoder);
        fileAppender.setFile("build.log");
        return fileAppender;
    }

    @Bean (initMethod = "start", destroyMethod = "stop")
    public static SMTPAppender mailAppender(LoggerContext context) {
        SMTPAppender mailAppender = new SMTPAppender();
        mailAppender.setContext(context);
        mailAppender.setName("GmailAppender");
        mailAppender.setSMTPHost("smtp.gmail.com");
        mailAppender.setSMTPPort(465); // 587
        mailAppender.setSTARTTLS(true);
        mailAppender.setUsername("xxxxxx@gmail.com");
        mailAppender.setPassword("xxxxxx");
        mailAppender.setFrom("xxxxxx@gmail.com");
        mailAppender.addTo("xxxxxx@gmail.com");
        mailAppender.setSubject("[LOG] Java - learnintouch");
        PatternLayout patternLayout = new PatternLayout();
        patternLayout.setPattern(PATTERN);
        mailAppender.setLayout(patternLayout);
        LevelFilter levelRangeFilter = new LevelFilter();
        levelRangeFilter.setLevel(Level.ERROR);
        mailAppender.addFilter(levelRangeFilter);
        return mailAppender;
    }

    @Bean
    public static Logger registerSpringLogger(ConsoleAppender consoleAppender) {
        Logger logger = new Logger(...
        logger.setLevel(Level.DEBUG);
        logger.addAppender(consoleAppender);
        return logger;
    }

모든 등록 빈을 OFF 레벨로 설정하더라도 콘솔에 여전히 많은 출력이 있습니다.

위의 구성을 무시하지 않으려면 어떻게해야합니까?

업데이트 : 사실, 구성은 무시되지 않았습니다. 단순히 많은 콘솔 출력에 익사 한 것입니다. 이 콘솔 출력을 줄이는 한 가지 방법은 다음을 포함하는 src / main / resources 디렉토리에 logback.xml 파일을 추가하는 것입니다.

<?xml version="1.0" encoding="UTF-8"?>

<!-- This empty file is one way to prevent logback from logging like crazy -->
<configuration />

그런 다음 다음 구성을 사용하면 응용 프로그램 로거와 SQL 문만 출력 할 수있었습니다.

  @Bean
  public static Logger registerThalasoftLogger(LoggerContext loggerContext,
      ConsoleAppender consoleAppender, FileAppender fileAppender) throws IOException {
    Logger logger = loggerContext.getLogger("com.nsn.nitro.project.data");
    logger.setLevel(Level.DEBUG); // Display the application loggers
    logger.addAppender(consoleAppender);
    logger.addAppender(fileAppender);
    return logger;
  }

  @Bean
  public static Logger registerSpringLogger(LoggerContext loggerContext,
      ConsoleAppender consoleAppender) {
    Logger logger = loggerContext.getLogger("org.springframework");
    logger.setLevel(Level.OFF);
    logger.addAppender(consoleAppender);
    return logger;
  }

  @Bean
  public static Logger registerJdbcSqlOnlyLogger(LoggerContext loggerContext,
      ConsoleAppender consoleAppender, FileAppender fileAppender) throws IOException {
    Logger logger = loggerContext.getLogger("jdbc.sqlonly");
    logger.setLevel(Level.DEBUG); // Display the sql statements with their parameters values
    logger.addAppender(consoleAppender);
    logger.addAppender(fileAppender);
    return logger;
  }

  @Bean
  public static Logger registerHibernateTypeLogger(LoggerContext loggerContext,
      ConsoleAppender consoleAppender) {
    Logger logger = loggerContext.getLogger("org.hibernate.type");
    logger.setLevel(Level.OFF);
    logger.addAppender(consoleAppender);
    return logger;
  }

  @Bean
  public static Logger registerHibernateSqlLogger(LoggerContext loggerContext,
      ConsoleAppender consoleAppender) {
    Logger logger = loggerContext.getLogger("org.hibernate.SQL");
    logger.setLevel(Level.OFF);
    logger.addAppender(consoleAppender);
    return logger;
  }

  @Bean
  public static Logger registerLog4JdbcLogger(LoggerContext loggerContext,
      ConsoleAppender consoleAppender) throws IOException {
    Logger logger = loggerContext.getLogger("log4jdbc.debug");
    logger.setLevel(Level.OFF);
    logger.addAppender(consoleAppender);
    return logger;
  }

이 업데이트는 logback.xml 파일을 사용하기 때문에 해결 방법이 아니라 해결책으로 간주됩니다. 내 원래 질문은 XML 무료 구성에 관한 것이었다.

해결법

  1. ==============================

    1.우리는 애플리케이션의 로깅을 재구성 할 수 있도록 구현 된 것과 같은 것이 필요했기 때문에 Apache 2.0 라이선스에 따라 소스를 오픈하여 Github에 올려 놓기로 결정했습니다. 로그백 구성 프로젝트를 살펴보십시오.

    우리는 애플리케이션의 로깅을 재구성 할 수 있도록 구현 된 것과 같은 것이 필요했기 때문에 Apache 2.0 라이선스에 따라 소스를 오픈하여 Github에 올려 놓기로 결정했습니다. 로그백 구성 프로젝트를 살펴보십시오.

    유용하다고 생각하시면 (이메일을 보내 주시거나, 프로젝트의 pom.xml에서 내 이메일을 찾거나 여기에 답장 해주십시오) 공개하고 Maven Central으로 푸시 할 것입니다.

    이 프로젝트는 매우 작지만 매우 간단합니다. 일을하는 방법을 더 잘 이해하기 위해 몇 가지 테스트를 살펴볼 수 있습니다.

  2. from https://stackoverflow.com/questions/36999436/my-logback-java-based-no-xml-config-is-ignored by cc-by-sa and MIT license