Home > Spring > πŸƒ[Spring] slf4j와 logback.

πŸƒ[Spring] slf4j와 logback.
Spring Framework

πŸƒ[Spring] slf4j와 logback.

1️⃣ slf4j

  • 'SLF4J(Simple Logging Facade for Java)' λŠ” Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ 둜그 기둝을 μ‰½κ²Œ κ΄€λ¦¬ν•˜κ³  λ‹€λ₯Έ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬μ™€ 톡합할 수 μžˆλ„λ‘ λ„μ™€μ£ΌλŠ” λ‘œκΉ… μΈν„°νŽ˜μ΄μŠ€μž…λ‹ˆλ‹€.
  • 'SLF4J' λŠ” λ‹€μ–‘ν•œ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬(e.g, Log4j, Logback, java.util.logging λ“±)에 λŒ€ν•΄ κ³΅ν†΅λœ μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ œκ³΅ν•˜μ—¬ κ°œλ°œμžκ°€ νŠΉμ • λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬μ— μ’…μ†λ˜μ§€ μ•Šκ³  μœ μ—°ν•˜κ²Œ 둜그λ₯Ό 관리할 수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

1️⃣ slf4j의 μ£Όμš” κΈ°λŠ₯.

    1. λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬μ™€μ˜ 좔상화
      • slf4jλŠ” μ—¬λŸ¬ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬μ— μ’…μ†λ˜μ§€ μ•Šκ²Œ ν•©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, μ½”λ“œμ—μ„œ slf4j μΈν„°νŽ˜μ΄μŠ€λ₯Ό μ‚¬μš©ν•˜λ©΄ λ‚˜μ€‘μ— λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬λ₯Ό μ‰½κ²Œ ꡐ체할 수 μžˆμŠ΅λ‹ˆλ‹€.
    1. λ‘œκΉ… μ„±λŠ₯ μ΅œμ ν™”
      • slf4jλŠ” λ¬Έμžμ—΄ 병합에 λ”°λ₯Έ μ„±λŠ₯ 문제λ₯Ό ν”Όν•  수 μžˆλ„λ‘ μ§€μ›ν•©λ‹ˆλ‹€.
      • 예λ₯Ό λ“€μ–΄, slf4jλŠ” 둜그 λ©”μ‹œμ§€μ˜ λ¬Έμžμ—΄ 결합을 μ§€μ—°μ‹œμΌœ, λ‘œκ·Έκ°€ μ‹€μ œλ‘œ 기둝될 λ•Œλ§Œ 결합이 λ°œμƒν•˜λ„λ‘ ν•©λ‹ˆλ‹€.
    1. API 일관성
      • slf4jλ₯Ό μ‚¬μš©ν•˜λ©΄ λ‘œκΉ…μ„ μœ„ν•œ μΌκ΄€λœ APIλ₯Ό μ œκ³΅λ°›μ„ 수 있으며, 이λ₯Ό 톡해 λ‘œκΉ…μ„ ν‘œμ€€ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

2️⃣ μ‚¬μš© 방법.

  • slf4jλ₯Ό μ‚¬μš©ν•˜κΈ° μœ„ν•΄μ„œλŠ”, μš°μ„  slf4j μΈν„°νŽ˜μ΄μŠ€μ™€ 이λ₯Ό κ΅¬ν˜„ν•œ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬(예: Logback)λ₯Ό ν”„λ‘œμ νŠΈμ— ν¬ν•¨μ‹œμΌœμ•Ό ν•©λ‹ˆλ‹€.
    • μ½”λ“œλŠ” 일반적으둜 μ•„λž˜μ™€ 같이 μ‚¬μš©λ©λ‹ˆλ‹€.
      ```java
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;

public class MyClass {
// Logger 생성
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

public void doSomthing() {
    // 둜그 λ©”μ‹œμ§€ 기둝
    logger.info("This is an info message");
    logger.debug("This is a debug message");
} } ``` - 이 μ½”λ“œλŠ” **`'slf4j'`** λ₯Ό μ΄μš©ν•΄ 둜그λ₯Ό κΈ°λ‘ν•˜λŠ” 예둜, λ‘œκΉ… λ©”μ‹œμ§€λŠ” μ„€μ •λœ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬λ₯Ό 톡해 좜λ ₯λ©λ‹ˆλ‹€.

✏️ μš”μ•½.

  • slf4jλŠ” Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬ κ°„μ˜ 좔상화 λ ˆμ΄μ–΄λ₯Ό μ œκ³΅ν•˜λ©°, μ½”λ“œκ°€ νŠΉμ • λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬μ— μ’…μ†λ˜μ§€ μ•Šλ„λ‘ ν•©λ‹ˆλ‹€.
    • 이λ₯Ό 톡해 μœ μ—°ν•œ λ‘œκΉ… 관리가 κ°€λŠ₯ν•΄μ§‘λ‹ˆλ‹€.

2️⃣ logback

  • 'logback' 은 Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©λ˜λŠ” κ³ μ„±λŠ₯ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬λ‘œ, slf4j의 ꢌμž₯ κ΅¬ν˜„μ²΄ 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€.
  • 'logback' 은 slf4jλ₯Ό 톡해 μ ‘κ·Όν•  수 있으며, λ›°μ–΄λ‚œ μ„±λŠ₯κ³Ό μœ μ—°ν•œ μ„€μ •, λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜λŠ” 것이 νŠΉμ§•μž…λ‹ˆλ‹€.

1️⃣ logback의 μ£Όμš” ꡬ성 μš”μ†Œ.

    1. Logback Classic
      • slf4j와 직접 ν†΅ν•©λ˜λŠ” logback의 핡심 λͺ¨λ“ˆμž…λ‹ˆλ‹€.
      • 'Logback Classic' 은 Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ λ‘œκΉ… κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λ©°, λ‹€μ–‘ν•œ 둜그 레벨(INFO, DEBUG, WARN, ERROR λ“±)을 μ§€μ›ν•©λ‹ˆλ‹€.
    1. Logback Core
      • Logback Classicκ³Ό Logback Access(μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μš©)λ₯Ό 기반으둜 ν•˜λŠ” 일반적인 λ‘œκΉ… κΈ°λŠ₯을 μ œκ³΅ν•©λ‹ˆλ‹€.
      • 'Logback Core' λŠ” Appender, Layout, Filter λ“±κ³Ό 같은 κΈ°λ³Έ ꡬ성 μš”μ†Œλ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.
    1. Logback Access
      • μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ HTTP μš”μ²­κ³Ό 응닡을 λ‘œκΉ…ν•  수 μžˆλ„λ‘ μ§€μ›ν•˜λŠ” λͺ¨λ“ˆμž…λ‹ˆλ‹€.
      • 주둜 Java Servlet ν™˜κ²½μ—μ„œ μ‚¬μš©λ©λ‹ˆλ‹€.

3️⃣ logback의 νŠΉμ§•.

    1. 높은 μ„±λŠ₯
      • 'logback' 은 λΉ λ₯Έ λ‘œκΉ… μ„±λŠ₯을 μ œκ³΅ν•˜λ©°, 특히 λŒ€κ·œλͺ¨ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ νš¨κ³Όμ μž…λ‹ˆλ‹€.
    1. μœ μ—°ν•œ ꡬ성
      • 'logback' 은 XML λ˜λŠ” Groovy 슀크립트둜 λ‘œκΉ… 섀정을 ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.
      • 이λ₯Ό 톡해 λ‹€μ–‘ν•œ 쑰건에 따라 λ‘œκΉ… λ™μž‘μ„ μ„Έλ°€ν•˜κ²Œ μ œμ–΄ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    1. 쑰건뢀 λ‘œκΉ…
      • 'logback' 은 νŠΉμ • μ‘°κ±΄μ—μ„œλ§Œ λ‘œκΉ…μ„ μˆ˜ν–‰ν•˜λ„λ‘ μ„€μ •ν•  수 μžˆμ–΄, λΆˆν•„μš”ν•œ 둜그 기둝을 쀄이고 μ„±λŠ₯을 μ΅œμ ν™”ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    1. 이전 둜그 ν”„λ ˆμž„μ›Œν¬μ™€μ˜ ν˜Έν™˜μ„±
      • 'logback' 은 기쑴의 'Log4j' μ„€μ • νŒŒμΌμ„ μ‚¬μš©ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•˜μ—¬, κΈ°μ‘΄ 'Log4j' μ‚¬μš©μžκ°€ μ‰½κ²Œ 'logback' 으둜 μ „ν™˜ν•  수 μžˆλ„λ‘ λ•μŠ΅λ‹ˆλ‹€.
    1. λ‹€μ–‘ν•œ 좜λ ₯ ν˜•μ‹
      • 'logback' 은 μ½˜μ†”, 파일, 원격 μ„œλ²„, λ°μ΄ν„°λ² μ΄μŠ€ λ“± λ‹€μ–‘ν•œ 좜λ ₯ λŒ€μƒμœΌλ‘œ 둜그λ₯Ό 기둝할 수 있으며, 좜λ ₯ ν˜•μ‹μ„ 자유둭게 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4️⃣ logback μ‚¬μš© 예제.

<configuration>
    <!-- μ½˜μ†”μ— 둜그λ₯Ό 좜λ ₯ν•˜λŠ” Appender -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- νŒŒμΌμ— 둜그λ₯Ό κΈ°λ‘ν•˜λŠ” Appender -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>mylog.log</file>
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 루트 둜거 μ„€μ • -->
    <root level="debug">
        <appender-ref ref="STDOUT" />
        <appender-red red="FILE" />
    </root>
</configuration>
  • 이 μ˜ˆμ‹œλŠ” μ½˜μ†”κ³Ό νŒŒμΌμ— 둜그λ₯Ό 좜λ ₯ν•˜λ„λ‘ μ„€μ •ν•˜λŠ” κ°„λ‹¨ν•œ μ˜ˆμ‹œμž…λ‹ˆλ‹€.
    • logback은 이외에도 λ³΅μž‘ν•œ μš”κ΅¬ 사항을 μΆ©μ‘±ν•  수 μžˆλŠ” λ‹€μ–‘ν•œ κΈ°λŠ₯을 μ œκ³΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

✏️ μš”μ•½.

  • logback은 Java μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ—μ„œ μ‚¬μš©λ˜λŠ” κ³ μ„±λŠ₯ λ‘œκΉ… ν”„λ ˆμž„μ›Œν¬λ‘œ, slf4j와 ν•¨κ»˜ μ‚¬μš©λ©λ‹ˆλ‹€.
  • logback은 μœ μ—°ν•œ μ„€μ •κ³Ό 높은 μ„±λŠ₯, λ‹€μ–‘ν•œ κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€.