๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring Boot์™€ ๋กœ๊น…(Logging) ์™„๋ฒฝ ๊ฐ€์ด๋“œ: Logback, Log4j2 ์„ค์ • ๋ฐ ๋กœ๊ทธ ๊ด€๋ฆฌ ์ „๋žต

mrmount 2024. 10. 21.

 

๋กœ๊น…(Logging) ์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. Spring Boot ๋Š” ๋‹ค์–‘ํ•œ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง ํ•˜๊ณ  ๋ฌธ์ œ ํ•ด๊ฒฐ ์— ๋„์›€์„ ์ค๋‹ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Logback๊ณผ Log4j2์˜ ์„ค์ • ๋ฐฉ๋ฒ• , ๋กœ๊ทธ ํŒŒ์ผ ๊ด€๋ฆฌ ์ „๋žต , ๊ทธ๋ฆฌ๊ณ  ๋กœ๊ทธ ํ•„ํ„ฐ๋ง๊ณผ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐฉ๋ฒ• ์„ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 


 

 

๋ชฉ์ฐจ

  1. Spring Boot์˜ ๋กœ๊น… ๊ฐœ์š”
  2. Logback vs. Log4j2: ์–ด๋–ค ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ• ๊นŒ?
  3. ๋กœ๊ทธ ํŒŒ์ผ ๊ด€๋ฆฌ ์ „๋žต๊ณผ ์„ค์ • ๋ฐฉ๋ฒ•
  4. ๋กœ๊ทธ ํ•„ํ„ฐ๋ง ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐฉ๋ฒ•
  5. ๋กœ๊น…์˜ ์ค‘์š”์„ฑ๊ณผ ์ตœ์‹  ํŠธ๋ Œ๋“œ

 


 

1. Spring Boot์˜ ๋กœ๊น… ๊ฐœ์š”

Spring Boot๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Logback์„ ๋‚ด์žฅ ํ•˜๊ณ  ์žˆ์–ด, ๋ณ„๋„์˜ ์„ค์ • ์—†์ด๋„ ๊ฐ„๋‹จํ•œ ๋กœ๊ทธ๋ฅผ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์— ๋”ฐ๋ผ Log4j2 ์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊น…์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ƒํƒœ ๋ชจ๋‹ˆํ„ฐ๋ง : ์˜ค๋ฅ˜ ๋ฐ ๊ฒฝ๊ณ  ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฌธ์ œ ํ•ด๊ฒฐ ์ง€์› : ๋กœ๊ทธ๋ฅผ ํ†ตํ•ด ๋ฌธ์ œ ๋ฐœ์ƒ ์‹œ์ ๊ณผ ์›์ธ์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ณด์•ˆ ๋ฐ ๊ฐ์‚ฌ : ์ค‘์š”ํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋กํ•˜์—ฌ ๋ˆ„๊ฐ€ ๋ฌด์—‡์„ ํ–ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

2. Logback vs. Log4j2: ์–ด๋–ค ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ• ๊นŒ?

Spring Boot๋Š” Logback ์„ ๊ธฐ๋ณธ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ์‚ฌ์šฉํ•˜์ง€๋งŒ, Log4j2 ์™€ ๊ฐ™์€ ํ”„๋ ˆ์ž„์›Œํฌ๋„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋‘ ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์ฐจ์ด๋ฅผ ์•„๋ž˜ ํ‘œ๋กœ ์ •๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋Šฅ Logback Log4j2
์„ฑ๋Šฅ ๋น ๋ฅธ ์†๋„์™€ ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์— ๊ฐ•์ 
Spring Boot ์ง€์› ๊ธฐ๋ณธ ์ง€์› ๋ณ„๋„ ์˜์กด์„ฑ ์ถ”๊ฐ€ ํ•„์š”
์„ค์ • ํŒŒ์ผ ํ˜•์‹ XML XML, JSON, YAML ์ง€์›
๊ธฐ๋Šฅ ํ™•์žฅ์„ฑ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์ด ์ถฉ๋ถ„ํ•จ ๊ณ ๊ธ‰ ํ•„ํ„ฐ๋ง๊ณผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•์— ๊ฐ•ํ•จ



Logback ์‚ฌ์šฉ์ด ์ถ”์ฒœ๋˜๋Š” ๊ฒฝ์šฐ

  • Spring Boot์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ ์„ ํ™œ์šฉํ•˜๊ณ  ์‹ถ์„ ๋•Œ
  • ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋น ๋ฅธ ๋กœ๊น…์ด ํ•„์š”ํ•  ๋•Œ

Log4j2 ์‚ฌ์šฉ์ด ์ถ”์ฒœ๋˜๋Š” ๊ฒฝ์šฐ

  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ ์—์„œ ๋†’์€ ์„ฑ๋Šฅ์ด ์š”๊ตฌ๋  ๋•Œ
  • ๊ณ ๊ธ‰ ๋กœ๊ทธ ํ•„ํ„ฐ๋ง ๊ณผ ๋‹ค์–‘ํ•œ ์„ค์ • ํŒŒ์ผ ํ˜•์‹์ด ํ•„์š”ํ•  ๋•Œ

 


 

3. ๋กœ๊ทธ ํŒŒ์ผ ๊ด€๋ฆฌ ์ „๋žต๊ณผ ์„ค์ • ๋ฐฉ๋ฒ•

Spring Boot์—์„œ๋Š” ๋กœ๊ทธ ํŒŒ์ผ ๊ด€๋ฆฌ ๋ฅผ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ๊ทธ๊ฐ€ ์Œ“์ด๋Š” ๋ฐฉ์‹์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋กœ๊ทธ๊ฐ€ ๋งŽ์•„์ง€๋ฉด ๋””์Šคํฌ ์šฉ๋Ÿ‰ ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ ์ ˆํ•œ ๊ด€๋ฆฌ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Logback ์„ค์ • ์˜ˆ์ œ: logback-spring.xml

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/application.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/application-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

์ฝ”๋“œ ์„ค๋ช…

  1. RollingFileAppender : ๋กœ๊ทธ ํŒŒ์ผ์„ ๋‚ ์งœ๋ณ„๋กœ ๋ถ„๋ฆฌํ•ด ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  2. maxHistory : ์ตœ๋Œ€ 30์ผ ๋™์•ˆ์˜ ๋กœ๊ทธ ํŒŒ์ผ์„ ๋ณด๊ด€ํ•ฉ๋‹ˆ๋‹ค.
  3. fileNamePattern : application-๋‚ ์งœ.log ํ˜•์‹์œผ๋กœ ๋กœ๊ทธ ํŒŒ์ผ์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

 


 

4. ๋กœ๊ทธ ํ•„ํ„ฐ๋ง ๋ฐ ๋ชจ๋‹ˆํ„ฐ๋ง ๋ฐฉ๋ฒ•

๋กœ๊ทธ ํ•„ํ„ฐ๋ง ์„ ํ†ตํ•ด ๋กœ๊ทธ ์ˆ˜์ค€๋ณ„๋กœ ์›ํ•˜๋Š” ๋กœ๊ทธ๋งŒ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Spring Boot๋Š” TRACE, DEBUG, INFO, WARN, ERROR ๋“ฑ์˜ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

application.properties๋ฅผ ์‚ฌ์šฉํ•œ ๋กœ๊ทธ ์ˆ˜์ค€ ์„ค์ •

logging.level.com.example.demo=DEBUG
logging.file.name=logs/app.log
logging.file.max-size=10MB
logging.file.total-size-cap=100MB

์ฝ”๋“œ ์„ค๋ช…

  • logging.level : ํŠน์ • ํŒจํ‚ค์ง€์˜ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
  • logging.file.max-size : ํ•˜๋‚˜์˜ ๋กœ๊ทธ ํŒŒ์ผ ์ตœ๋Œ€ ํฌ๊ธฐ๋ฅผ 10MB๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.
  • logging.file.total-size-cap : ์ „์ฒด ๋กœ๊ทธ ํŒŒ์ผ ์šฉ๋Ÿ‰์„ 100MB๋กœ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค.

ELK ์Šคํƒ์„ ์‚ฌ์šฉํ•œ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง

  • Elasticsearch : ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ €์žฅ์†Œ
  • Logstash : ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๊ณ  ๋ณ€ํ™˜
  • Kibana : ์‹œ๊ฐํ™” ๋„๊ตฌ๋กœ ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋ง

ELK ์Šคํƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋ถ„์„ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 


 

5. ๋กœ๊น…์˜ ์ค‘์š”์„ฑ๊ณผ ์ตœ์‹  ํŠธ๋ Œ๋“œ

  • ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ ์—์„œ๋Š” ๋กœ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•ด ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ ์— ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜ ์—์„œ๋Š” ๊ฐ ์„œ๋น„์Šค์˜ ๋กœ๊ทธ๋ฅผ ์ค‘์•™์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค.
  • ELK ์Šคํƒ ๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•ด ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ์„ ๋„์ž…ํ•˜๋Š” ๊ธฐ์—…์ด ๋Š˜์–ด๋‚˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋กœ๊ทธ ์ˆ˜์ค€ ์กฐ์ • ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ ๋‹จ๊ณ„์—์„œ๋Š” DEBUG ๋ ˆ๋ฒจ์„ ์‚ฌ์šฉํ•˜๊ณ , ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” INFO ์ด์ƒ๋งŒ ์ถœ๋ ฅํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค.

 


 

๊ด€๋ จ ๋งํฌ

 

Spring Boot ๊ณต์‹ ๋ฌธ์„œ๐Ÿ‘†

Logback ๊ณต์‹ ๋ฌธ์„œ๐Ÿ‘†

Log4j2 ๊ณต์‹ ๋ฌธ์„œ๐Ÿ‘†

ELK ์Šคํƒ ํŠœํ† ๋ฆฌ์–ผ๐Ÿ‘†

Spring Boot ๋กœ๊น… ๊ฐ€์ด๋“œ๐Ÿ‘†

Kibana๋กœ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๊ธฐ๐Ÿ‘†

 


 

FAQ

 

1. Logback๊ณผ Log4j2 ์ค‘ ์–ด๋Š ๊ฒƒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ์š”?

  • ๊ฐ„๋‹จํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์—์„œ๋Š” Logback์ด ์ ํ•ฉํ•˜๋ฉฐ, ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ ์ด๋‚˜ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด Log4j2๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

2. ๋กœ๊ทธ ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

  • Logback์—์„œ๋Š” max-size ์™€ total-size-cap ์„ค์ •์„ ํ†ตํ•ด ๋กœ๊ทธ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3. ๋กœ๊ทธ ํŒŒ์ผ์„ ์ผ๋ณ„๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

  • Logback์˜ TimeBasedRollingPolicy ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ ์งœ๋ณ„๋กœ ๋กœ๊ทธ ํŒŒ์ผ์„ ๋ถ„๋ฆฌ ํ•ด ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4. ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง์„ ์œ„ํ•ด ์–ด๋–ค ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๋‚˜์š”?

  • ELK ์Šคํƒ (Elasticsearch, Logstash, Kibana)์ด ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ๋ชจ๋‹ˆํ„ฐ๋ง ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

5. ๋กœ๊ทธ ๋ ˆ๋ฒจ์€ ์–ด๋–ป๊ฒŒ ์„ค์ •ํ•˜๋‚˜์š”?

  • application.properties ์—์„œ logging.level ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ํŒจํ‚ค์ง€์˜ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


 

๋งˆ๋ฌด๋ฆฌ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” Spring Boot์˜ ๋กœ๊น… ์„ค์ •๊ณผ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• ์„ ๋‹ค๋ค˜์Šต๋‹ˆ๋‹ค. Logback๊ณผ Log4j2์˜ ์ฐจ์ด์ ์„ ์ดํ•ดํ•˜๊ณ , ๋กœ๊ทธ ํŒŒ์ผ ๊ด€๋ฆฌ ์ „๋žต๊ณผ ๋กœ๊ทธ ํ•„ํ„ฐ๋ง ์„ ํ†ตํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์› ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ ๊ด€๋ฆฌ๋Š” ๋‹จ์ˆœํ•œ ์ถœ๋ ฅ ์ด์ƒ์˜ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋ชจ๋‹ˆํ„ฐ๋ง๊ณผ ๋ฌธ์ œ ํ•ด๊ฒฐ์˜ ํ•ต์‹ฌ ๋„๊ตฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์˜ ํ”„๋กœ์ ํŠธ์— ํšจ์œจ์ ์ธ ๋กœ๊น… ์‹œ์Šคํ…œ ์„ ๋„์ž…ํ•ด๋ณด์„ธ์š”! ๐Ÿš€

๋Œ“๊ธ€