스프링 부트(Spring boot)에서 logback 적용하기

2016/09/08 - [개발/JAVA] - 스프링 부트(Spring boot)에서 프로퍼티 사용하기


전에 이어서 이번에는 logback을 적용시켜보겠습니다.

사실 이미 스프링 부트가 알아서 다 적용시켜놨지면 설정파일을 이용해서

프로파일 적용 및 파일에 쓰는 방법을 해보겠습니다.


logback.xml --> logback-spring.xml로 만드세요

src/main/resources 폴더에 logback.xml을 작성합니다.

아래 샘플은 제가 사용하고 있는 파일입니다.

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

<configuration scan="true" scanPeriod="1 minutes">

<include resource="org/springframework/boot/logging/logback/defaults.xml"/>

<property value="/temp/log/log" name="LOG_FILE_PREFIX"/>

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">

<encoder>

<charset>UTF-8</charset>

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p}\(${PID:- }\)[%t] [%logger{30}:%line] %msg%n</pattern>

</encoder>

</appender>

<appender class="ch.qos.logback.core.rolling.RollingFileAppender" name="FILE">

<encoder>

<charset>UTF-8</charset>

<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p}\(${PID:- }\)[%t] [%logger{30}:%line] %msg%n</pattern>

</encoder>

<file>${LOG_FILE_PREFIX}.log</file>

<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">

<fileNamePattern>${LOG_FILE_PREFIX}_%d{yyyyMMdd}.log</fileNamePattern>

</rollingPolicy>

</appender>


<springProfile name="local">

<logger name="net.donnert.spring.boot" level="DEBUG" />

<root level="INFO">

<appender-ref ref="CONSOLE"/>

</root>

</springProfile>


<springProfile name="!local">

<logger name="net.donnert.spring.boot" level="DEBUG" />


<root level="INFO">

<appender-ref ref="CONSOLE"/>

<appender-ref ref="FILE"/>

</root>

</springProfile>

</configuration>


테스트

springprofile노드를 이용해 현재 적용중인 프로파일 별 설정이 가능합니다.

xml을 보시면 현재 프로파일이 local인 경우는 CONSOLE appender를 이용, 콘솔에만 출력

local이 아닌 경우 CONSOLE, FILE appender를 이용 파일에도 출력을 하게 됩니다.


아래처럼 로깅 패턴이 정의된 형식으로 바뀌었으며 프로파일을 dev(local이 아닌 프로파일)로 바꾸게 되면 추가적으로 D:\temp\log\log.log파일이 생성되는 것을 보실 수 있습니다.


2016-09-19 11:03:28.664  INFO(10952)[main] [net.donnert.spring.boot.Timer:30] exampleTimer init

2016-09-19 11:03:28.833  INFO(10952)[main] [o.s.j.e.a.AnnotationMBeanExporter:431] Registering beans for JMX exposure on startup

2016-09-19 11:03:28.846  INFO(10952)[main] [o.s.s.a.ScheduledAnnotationBeanPostProcessor:244] No TaskScheduler/ScheduledExecutorService bean found for scheduled processing

2016-09-19 11:03:28.857  INFO(10952)[pool-2-thread-1] [net.donnert.spring.boot.Timer:37] StopWatch '': running time (millis) = 189



2016/09/23 - [개발/JAVA] - 스프링 부트(Spring boot)에서 mybatis(oracle) 적용하기



5  Comments,   0  Trackbacks
  • qnrtjd123
    혹시 보시게 되면 에러확인좀 부탁드려요

    Failed to auto configure default logger context
    Reported exception:
    ch.qos.logback.core.joran.spi.JoranException: Problem parsing XML document. See previously reported errors.
    at ch.qos.logback.core.joran.event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:65)
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:141)
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:103)
    at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
    at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
    at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
    at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
    at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:273)
    at org.springframework.boot.SpringApplication.<clinit>(SpringApplication.java:189)
    at com.board.BoardApplication.main(BoardApplication.java:12)
    Caused by: org.xml.sax.SAXParseException; lineNumber: 53; columnNumber: 1; 예기치 않은 파일의 끝입니다.
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1239)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:648)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:332)
    at ch.qos.logback.core.joran.event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:59)
    ... 16 more
    14:33:58,963 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
    14:33:58,963 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
    14:33:58,963 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/springBoot/workspace/board/target/classes/logback.xml]
    14:33:59,019 |-ERROR in ch.qos.logback.core.joran.event.SaxEventRecorder@21300751 - XML_PARSING - Parsing fatal error on line 53 and column 1
    14:33:59,019 |-ERROR in ch.qos.logback.core.joran.event.SaxEventRecorder@21300751 - org.xml.sax.SAXParseException; lineNumber: 53; columnNumber: 1; 예기치 않은 파일의 끝입니다.




    • 첫줄에
      <?xml version="1.0" encoding="UTF-8"?>
      가 빠진것 같습니다. 본문 수정했으니 적용해보세요
    • jepark3452
      <?xml version="1.0" encoding="UTF-8"?>

      <configuration scan="true" scanperiod="1 minutes">
      <include resource="org/springframework/boot/logging/logback/defaults.xml" />
      <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
      <!-- 변수 지정 : 로그저장 경로는 자신의 환경에 맞게 수정해야 함. -->
      <property value="C:/spring-tool-suite-3.8.4/workspace/spring.boot/logs/schedule-log" name="LOG_FILE_PREFIX" />
      <!-- <property value="/temp/log/log" name="LOG_FILE_PREFIX" /> -->

      <!-- FILE Appender -->
      <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
      <file>${LOG_FILE_PREFIX}.log</file>
      <!-- 일자별로 로그파일 적용하기 -->
      <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${LOG_FILE_PREFIX}_%d{yyyyMMdd}.log</fileNamePattern>
      <maxHistory>60</maxHistory> <!-- 일자별 백업파일의 보관기간 -->
      </rollingPolicy>
      <encoder>
      <charset>UTF-8</charset>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p}\(${PID:- }\)[%t] [%logger{30}:%line] %msg%n</pattern>
      </encoder>
      </appender>

      <!-- CONSOLE Appender -->
      <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
      <encoder>
      <charset>UTF-8</charset>
      <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p}\(${PID:- }\)[%t] [%logger{30}:%line] %msg%n</pattern>
      </encoder>
      <!-- <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%d{yyyy-MM-dd HH:mm:ss} [%-5p] [%F]%M\(%L\) : %m%n</pattern>
      </layout> -->
      </appender>

      <!-- TRACE > DEBUG > INFO > WARN > ERROR, 대소문자 구분 안함 -->
      <!-- profile 을 읽어서 appender 을 설정할수 있다.(phase별 파일을 안만들어도 되는 좋은 기능) -->
      <springProfile name="local">
      <root level="INFO">
      <appender-ref ref="CONSOLE" />
      </root>
      </springProfile>
      <springProfile name="!local">
      <root level="INFO">
      <appender-ref ref="FILE" />
      <appender-ref ref="CONSOLE" />
      </root>
      </springProfile>
      </configuration>
    • jepark3452
      저도 에러가 나서 여기저기서 검색끝에 해결했습니다. 위에 댓글 확인해 보세요~
    • 어랏 감사합니다
      코드 하이라이터 제거과정에서 뭔가 어긋난거 같네요
댓글 쓰기