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