[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.우리는 애플리케이션의 로깅을 재구성 할 수 있도록 구현 된 것과 같은 것이 필요했기 때문에 Apache 2.0 라이선스에 따라 소스를 오픈하여 Github에 올려 놓기로 결정했습니다. 로그백 구성 프로젝트를 살펴보십시오.
우리는 애플리케이션의 로깅을 재구성 할 수 있도록 구현 된 것과 같은 것이 필요했기 때문에 Apache 2.0 라이선스에 따라 소스를 오픈하여 Github에 올려 놓기로 결정했습니다. 로그백 구성 프로젝트를 살펴보십시오.
유용하다고 생각하시면 (이메일을 보내 주시거나, 프로젝트의 pom.xml에서 내 이메일을 찾거나 여기에 답장 해주십시오) 공개하고 Maven Central으로 푸시 할 것입니다.
이 프로젝트는 매우 작지만 매우 간단합니다. 일을하는 방법을 더 잘 이해하기 위해 몇 가지 테스트를 살펴볼 수 있습니다.
from https://stackoverflow.com/questions/36999436/my-logback-java-based-no-xml-config-is-ignored by cc-by-sa and MIT license