logback VS log4j2 - g-market/b-shop-backend GitHub Wiki

logback

  • spring-boot-starter-web์˜ ๊ธฐ๋ณธ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ

log4j2

  • logback, log4j์˜ ๋‹จ์ ์„ ๊ฐœ์„ ํ•œ ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ
  • logback๋ณด๋‹ค ํƒ์›”ํ•œ ์„ฑ๋Šฅ ๋ฐ ๋‹ค์–‘ํ•œ appender ์ œ๊ณต

logback์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ํŒŒ์ผ ๋กœ๊น…์„ ํ•  ์ˆ˜ ์žˆ๊ธฐ์— logback์„ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ•œ๋‹ค.

ํ™˜๊ฒฝ ์„ธํŒ…

configurations {
    // logback ์˜์กด์„ฑ ์ œ๊ฑฐ
    all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
}

dependencies {
    // log4j2
    implementation 'org.springframework.boot:spring-boot-starter-log4j2'
    implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-yaml'
}

spring-boot-starter-web์—์„œ ๊ธฐ๋ณธ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” logback ๋กœ๊น… ํ”„๋ ˆ์ž„์›Œํฌ ์˜์กด์„ฑ์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

application.yaml

# application.yml
logging:
  config: classpath:log4j2.yml

๊ธฐ๋ณธ default ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. ๋งŒ์•ฝ ๋กœ์ปฌ ํ™˜๊ฒฝ๊ณผ ๋ฐฐํฌํ™˜๊ฒฝ์ด ๋‚˜๋ˆ„์–ด์ ธ์žˆ๋‹ค๋ฉด logging์˜ config๋ฅผ ๊ทธ์— ๋งž๊ฒŒ ์ˆ˜์ •ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

# application-local.yml
logging:
  config: classpath:log4j2-local.yml

# application-prod.yml
logging:
  config: classpath:log4j2-prod.yml

๋กœ๊น… ์ „๋žต

๋กœ๊น… ์ „๋žต์— ๋”ฐ๋ผ์„œ log4j2 yml ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ๋‹ฌ๋ผ์ง„๋‹ค.

Console ๋ฐฉ์‹, file(๋‹จ์ผ ํŒŒ์ผ, ์žฌ์‹คํ–‰ ์‹œ ์‚ฌ๋ผ์ง), rollingfile(์•„์นด์ด๋ธŒํ™” ํ•˜์—ฌ ๋ณด๊ด€)

์šฐ๋ฆฌ๋Š” ๋กœ์ปฌ์—์„œ๋Š” file, rollingfile๋กœ ๋‚จ๊ธธ ํ•„์š”๊ฐ€ ์—†๋‹ค๊ณ  ํŒ๋‹จํ•˜์—ฌ Appender๋ฅผ Console๋กœ ์„ค์ •ํ–ˆ๋‹ค.

๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” ๋กœ๊ทธ ํŒŒ์ผ์„ ๋ณด๊ด€ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค๊ณ  ํŒ๋‹จํ•ด RollingFile_Appender๋กœ ์„ค์ •ํ–ˆ๋‹ค.

๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ๋Š” DEBUG, ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” INFO๋กœ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์„ค์ •ํ–ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜, ๋กœ์ปฌ๊ณผ ๊ฐœ๋ฐœ์—์„œ Spring Application์„ ๊ตฌ๋™ ์‹œ ์Šคํ”„๋ง ๊ด€๋ จ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๋“ค์ด ๋„ˆ๋ฌด ๋งŽ์ด ์ถœ๋ ฅ๋ผ Root log level์€ INFO๋กœ, Controller ํŒจํ‚ค์ง€ ์ดํ•˜์—์„œ๋Š” DEBUG๋กœ ์„ค์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

log4j2-local.yaml

# log4j2-local.yaml
Configutation:
  name: Default
  status: info

  Properties:
    Property:
      name: log-path
      value: "logs"

  Appenders:
    Console:
      name: Console_Appender
      target: SYSTEM_OUT
      PatternLayout:
        pattern: "%style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{cyan} %highlight{[%-5p]}{FATAL=bg_red,
            ERROR=red, INFO=green, DEBUG=blue, TRACE=bg_yellow} [%C] %style{[%t]}{yellow}- %m%n"
  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: Console_Appender
    Logger:
      - name: com.gabia.bshop
        additivity: false
        level: debug
        AppenderRef:
          - ref: Console_Appender

log4j2-prod.yaml

Configutation:
  name: Default
  status: info

  Properties:
    Property:
      name: log-path
      value: "logs"

  Appenders:
    RollingFile:
      - name: RollingFile_Appender
        fileName: ${log-path}/rollingfile.log
        filePattern: "${log-path}/archive/rollingfile.log_%d{yyyy-MM-dd}-%i.gz"
        PatternLayout:
          pattern: "%style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{cyan} %highlight{[%-5p]}{FATAL=bg_red,
            ERROR=red, INFO=green, DEBUG=blue, TRACE=bg_yellow} [%C] %style{[%t]}{yellow}- %m%n"
        Policies:
          TimeBasedTriggeringPolicy:
            Interval: 1
            modulate: true
          SizeBasedTriggeringPolicy:
            size: "10 MB"
        DefaultRollOverStrategy:
          max: 10
          Delete:
            basePath: "${log-path}/archive"
            maxDepth: "1"
            IfLastModified:
              age: "P14D"
            IfAccumulatedFileCount:
              exceeds: 140
  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: RollingFile_Appender
    Logger:
      - name: com.gabia.bshop
        additivity: false
        level: info
        AppenderRef:
          - ref: RollingFile_Appender

Configuration

Configutation:
  name: Default
  status: info

๋กœ๊ทธ ์„ค์ •์˜ ์ตœ์ƒ์œ„ ์š”์†Œ์ด๋‹ค. ํ•ด๋‹น ํŒŒ์ผ์˜ ๋ฃจํŠธ ๋กœ๊น… ์ „๋žต์˜ name๊ณผ status๋ฅผ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

status๋Š” log level์„ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค. error, warn, info, debug, trace ์ค‘์—์„œ ์„ ํƒํ•˜๋ฉด ๋œ๋‹ค.

๋กœ๊ทธ ๋ ˆ๋ฒจ์€ ์•„๋ž˜ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค.

TRACE > DEBUG > INFO > WARN > ERROR

๋ณดํ†ต์€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” debug ๋˜๋Š” info, ๋ฐฐํฌ ํ™˜๊ฒฝ์—์„œ๋Š” info๋ฅผ ๋งŽ์ด ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ธ๋‹ค.

๋ฌด์กฐ๊ฑด ๋งŽ์€ ์ •๋ณด๋ฅผ ๋„์šด๋‹ค๊ณ  ์ข‹์€ ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ๊ทธ๋งŒํผ ์šฉ๋Ÿ‰์„ ๋งŽ์ด ์ฐจ์ง€ํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋กœ๊ทธ๊ฐ€ ๊ธฐ๋ก๋ผ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

Properties

Properties:
    Property:
      name: log-path
      value: "logs"

Appenders

Appenders:
Console:
  name: Console_Appender
  target: SYSTEM_OUT
  PatternLayout:
    pattern: "%style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{cyan} %highlight{[%-5p]}{FATAL=bg_red,
        ERROR=red, INFO=green, DEBUG=blue, TRACE=bg_yellow} [%C] %style{[%t]}{yellow}- %m%n"

๋กœ๊น… ์ „๋žต์„ ๋ช…์‹œํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด๋‹ค.

  • target: ํ‘œ์ค€ ์ž…์ถœ๋ ฅ์ž„์„ ๋ช…์‹œ
  • pattern: ๋กœ๊ทธ ์Šคํƒ€์ผ ์ง€์ •ํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Œ ( ERROR๋Š” ๋นจ๊ฐ„์ƒ‰, INFO๋Š” ์ดˆ๋ก์ƒ‰ ๋“ฑ์œผ๋กœ)

RollingFile_Appender๋กœ ํ•  ๊ฒฝ์šฐ ํŒŒ์ผ์„ ์ €์žฅํ•  ๊ธฐ๊ฐ„, ์šฉ๋Ÿ‰ ๊ด€๋ฆฌ ๋“ฑ์„ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฝค ๋ณต์žกํ•ด์ง„๋‹ค.

Appenders:
  RollingFile:
    - name: RollingFile_Appender
      fileName: ${log-path}/rollingfile.log
      filePattern: "${log-path}/archive/rollingfile.log_%d{yyyy-MM-dd}-%i.gz"
      PatternLayout:
        pattern: "%style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{cyan} %highlight{[%-5p]}{FATAL=bg_red,
            ERROR=red, INFO=green, DEBUG=blue, TRACE=bg_yellow} [%C] %style{[%t]}{yellow}- %m%n"
      Policies:
        TimeBasedTriggeringPolicy:
          Interval: 1
          modulate: true
        SizeBasedTriggeringPolicy:
          size: "10 MB"
      DefaultRollOverStrategy:
        max: 10
        Delete:
          basePath: "${log-path}/archive"
          maxDepth: "1"
          IfLastModified:
            age: "P14D"
          IfAccumulatedFileCount:
            exceeds: 140
  • File

    • name : RollingFileAppender ์ด๋ฆ„
    • fileName : ์ €์žฅํ•  ํŒŒ์ผ ๊ฒฝ๋กœ, ์ด๋ฆ„์— ๋‚ ์งœ ํ˜•์‹์„ ์ง€์ •ํ•˜์—ฌ ์ €์žฅ ๊ฐ€๋Šฅ (Properties์— ์ง€์ •ํ•œ logs ๋””๋ ‰ํ† ๋ฆฌ์˜ archive ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— rollingfile.log_%d{yyyy-MM-dd}.gz ํŒŒ์ผ๋ช…์œผ๋กœ ๋กœ๊ทธ ์ €์žฅ)
    • PatternLayout : ๋กœ๊ทธ ์ถœ๋ ฅ ์–‘์‹ ์ง€์ •
  • Policy : File RollingUp์˜ ๊ธฐ์ค€์„ ์ง€์ •

    • OnStartupTriggeringPolicy : jvm start์‹œ trigger
    • TimeBasedTriggeringPolicy + Interval : time์— ๋”ฐ๋ฅธ trigger(ํŒŒ์ผ ์ด๋ฆ„ ํŒจํ„ด์˜ ์ตœ์†Œ๋‹จ์œ„ ๋‚ ์งœ๋กœ ๊ณ„์‚ฐ, ์œ„ ์˜ˆ์‹œ๋Š” ํ•˜๋ฃจ์— ํ•œ ๋ฒˆ RollingUp). ์œ„ ์˜ˆ์‹œ๋Š” ํ•˜๋ฃจ ๋‹จ์œ„๋กœ ์••์ถ• ๋ณด๊ด€ํ•˜๋„๋ก ํ•จ.
    • SizeBasedTriggeringPolicy + size : file size์— ๋”ฐ๋ฅธ trigger.
    • CronTriggeringPolicy : Cron Expression(์‹œ๊ฐ„์— ๊ด€ํ•œ ํ‘œํ˜„)์— ๋”ฐ๋ฅธ trigger
  • DefaultRollOverStrategy : Rolling File์„ Over(์‚ญ์ œ)ํ•˜๋Š” ๊ธฐ์ค€์„ ์ง€์ •

    • max: ๋™์‹œ๊ฐ„๋Œ€์— ์ตœ๋Œ€ 10๊ฐœ๊นŒ์ง€ RollingFiles๊ฐ€ ์ƒ์„ฑ๋  ์ˆ˜ ์žˆ๋„๋ก ์ง€์ •
    • basePath: ์•„์นด์ด๋ธŒํ™”ํ•  ๋กœ๊ทธ ํŒŒ์ผ ์œ„์น˜ ์ง€์ •. (Properties์— ์ง€์ •ํ•œ logs ๋””๋ ‰ํ† ๋ฆฌ์˜ archive ๋””๋ ‰ํ† ๋ฆฌ ์•„๋ž˜์— rollingfile.log_%d{yyyy-MM-dd}.gz ํŒŒ์ผ๋ช…์œผ๋กœ ๋กœ๊ทธ ์ €์žฅ)
    • IfLastModified - age: "P14D": ์ˆ˜์ •๋œ์ง€ 14์ผ์ด ์ง€๋‚œ ํŒŒ์ผ์€ ์‚ญ์ œ
    • IfAccumulatedFileCount : RollingUp๋œ ์••์ถ•ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ๋””๋ ‰ํ† ๋ฆฌ์— ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ ๊ฐœ์ˆ˜. ํŒŒ์ผ ๊ฐœ์ˆ˜๋ฅผ ๋„˜์œผ๋ฉด ์˜ค๋ž˜๋œ ํŒŒ์ผ๋ถ€ํ„ฐ ์‚ญ์ œ(์ด 140๊ฐœ ์ดˆ๊ณผ์‹œ ์˜ค๋ž˜๋œ ํŒŒ์ผ๋ถ€ํ„ฐ ์‚ญ์ œ)

์ œ์‚ฌํ•œ ๋‚ด์šฉ์€ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•˜์ž.
https://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender

Loggers

Loggers:
Root:
  level: info
  AppenderRef:
    - ref: Console_Appender
Logger:
  - name: com.gabia.bshop
    additivity: false
    level: debug
    AppenderRef:
      - ref: Console_Appender

๋กœ๊น…์„ ์ง์ ‘ํ•˜๋Š” ์š”์†Œ, ๋กœ๊ฑฐ๋Š” ํŒจํ‚ค์ง€ ๋ณ„๋„๋กœ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. Root ํŒจํ‚ค์ง€์˜ ๋กœ๊ฑฐ๋Š” ํ•„์ˆ˜์ ์œผ๋กœ ์„ธํŒ…ํ•ด์ฃผ์–ด์•ผ ํ•˜๋ฉฐ, ์ถ”๊ฐ€์ ์ธ ๋กœ๊ฑฐ๋ฅผ ์„ค์ •ํ•˜๋ ค๋ฉด Logger๋กœ ์„ค์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

  • level : ํ•ด๋‹น ํŒจํ‚ค์ง€์— ์ฐ์„ ์ตœํ•˜ ๋กœ๊ทธ ๋ ˆ๋ฒจ์„ ์ง€์ •
  • additivity : false๋กœ ์ง€์ •์‹œ ๋กœ๊ทธ๊ฐ€ ์ค‘๋ณต์œผ๋กœ ์ฐํžˆ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ (๊ธฐ๋ณธ๊ฐ’: true)
  • AppenderRef : ref์†์„ฑ์œผ๋กœ ์ ์šฉํ•  Appender๋ฅผ ์ง€์ •
โš ๏ธ **GitHub.com Fallback** โš ๏ธ