Spring Boot로 구성한 Application을 CentOS의 Systemd 서비스로 등록하기 위해서 다음의 파일을 /etc/systemd/system/demo.service
파일로 기록합니다. 별도의 Configuration YAML 파일을 지정하려면 다음과 같이 -Dspring.config.location
옵션을 지정하고, 지정하지 않으면 JAR 파일의 CLASSPATH에서 application.yml 파일을 로딩합니다.
[Unit] Description=Demo Java Service [Service] WorkingDirectory=/opt/app ExecStart=/bin/java -Dspring.config.location=/opt/app/application.yml -jar /opt/app/demo-0.0.1-SNAPSHOT.jar → spring.config.location으로 설정 파일 추가 (별도로 지정하고자 하는 경우에만) User=root Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
Logback 설정 파일을 /opt/app/logback.xml
파일로 저장합니다. JAR 파일에 logback.xml
파일이 있다면 이 설정이 제대로 적용되지 않습니다. 따라서 개발시에 사용하는 로그 설정은 파일명이 logback-local.xml
파일 처럼 변경하시기 바랍니다.
<?xml version="1.0" encoding="UTF-8"?> <configuration> <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" /> <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" /> <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" /> <property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} [%X{requestId:- }]%clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <property name="CONSOLE_LOG_CHARSET" value="${CONSOLE_LOG_CHARSET:-default}"/> <property name="FILE_LOG_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/> <property name="FILE_LOG_CHARSET" value="${FILE_LOG_CHARSET:-default}"/> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> <charset>${CONSOLE_LOG_CHARSET}</charset> </encoder> </appender> <logger name="org.hibernate.validator.internal.util.Version" level="WARN"/> <logger name="org.apache.coyote.http11.Http11NioProtocol" level="WARN"/> <logger name="org.crsh.plugin" level="WARN"/> <logger name="org.apache.tomcat.util.net.NioSelectorPool" level="WARN"/> <logger name="org.apache.catalina.startup.DigesterFactory" level="ERROR"/> <logger name="org.springframework" level="INFO"/> <logger name="org.hibernate" level="INFO"/> <logger name="org.quartz" level="INFO"/> <logger name="com.mchange" level="INFO"/> <logger name="com.zaxxer" level="TRACE"/> <logger name="springfox.documentation" level="INFO"/> <logger name="jdbc.sqlonly" level="WARN"/> <logger name="jdbc.sqltiming" level="WARN"/> <logger name="jdbc.resultset" level="WARN"/> <logger name="jdbc.audit" level="WARN"/> <logger name="jdbc.connection" level="WARN"/> <logger name="io.datadynamics" level="DEBUG"/> <root level="DEBUG"> <appender-ref ref="CONSOLE"/> </root> </configuration>
Spring Boot의 설정 파일인 /opt/app/application.yml
파일을 다음과 같이 작성합니다. 아래 설정에서는 로그 파일의 경로만 지정하였습니다.
logging: config: /opt/app/logback.xml
이제 다음의 커맨드로 서비스를 시작합니다.
# systemctl start demo.service # systemctl status demo.service