λ‘κΉ
λ‘κΉ μ΄λ?
νλ‘κ·Έλ¨ λμ μ λ°μνλ λͺ¨λ μΌμ κΈ°λ‘νλ νμλ₯Ό λ§νλ€.
μ¬κΈ°μ μ΄μΌκΈ°νλ λͺ¨λ μΌ
μ μλΉμ€μ λμ μνλ μ₯μ λ±μ μκ°ν μ μλ€.
μλΉμ€μ λμ μνλΌ νλ€λ©΄, μμ€ν λ‘λ©, HTTP ν΅μ , νΈλμμ , DB μμ², μλν μμΈ λ±μ΄ μκ³ , μ₯μ λΌ νλ€λ©΄ μλνμ§ μμ μμΈ μ λκ° μλ€.
λ‘κΉ κ³Ό System.out.println()
μ½λ©μ νλ©΄μ System.out.println()
λ§μ΄ μ°μ΄λ΄€μ κ²μ΄λ€. μ΄κ²λ μΌμ’
μ κΈ°λ‘μ΄λΌκ³ μκ°ν΄λ³Ό μ μμ κ² κ°μλ° μ΄ λμ μ΄λ€ μ°¨μ΄κ° μμκΉ?
λ‘κΉ μ μΆλ ₯ νμμ μ§μ ν μ μκ³ , λ‘κ·Έ λ 벨μ λ°λΌ λ¨κΈ°κ³ μΆμ λ‘κ·Έλ₯Ό λ³λ μ§μ ν μ μμΌλ©°, μ½μ, νμΌ, λ€νΈμν¬ λ± λ‘κ·Έλ₯Ό λ³λμ μμΉμ λ¨κΈΈ μ μλ€.
λ‘κΉ κ³Ό λλ²κΉ
λ‘κΉ μ ν΅ν΄ κΈ°λ‘νλ λ€μν μ΄μ κ° μκ² μ§λ§, κ·Έ μ€μμλ λ¬Έμ μ μ νμ νλ μν λ λΆλͺ μνν κ²μ΄λ€.
κ°λ°κ³Όμ μ€μ λλ²κΉ μ΄λΌλ κ³Όμ μ΄ μ‘΄μ¬νλλ° μ λ‘κΉ μ΄ νμν κΉ?
μ¬μ€ λλ²κΉ μ μ¬μ©ν μ μλ€λ©΄ λλ²κΉ μ μ΅λν νμ©νλ κ²μ΄ ν¨κ³Όμ μ΄λ€. μ¬μ μ λ¬Έμ λ₯Ό μ°¨λ¨ν μ μκΈ° λλ¬Έμ΄λ€.
νμ§λ§ λλ²κΉ μ ν μ μλ μν©μμλ κΈ°λ‘μ ν΅ν΄ λ¬Έμ μ μ νμ νμ¬ μΆνμ κ°μ νλ λ°©ν₯μ λλͺ¨ν΄μΌνκΈ° λλ¬Έμ λ‘κΉ μ΄ μ΅μ μ μ νμ΄ λλ κ²μ΄λ€.
Logback
Logback μ΄λ?
Logback μ΄λ Log4J λ₯Ό κΈ°λ°μΌλ‘ κ°λ°λ SLF4J μ ꡬν체, λ‘κΉ λΌμ΄λΈλ¬λ¦¬λ€.
Log4J μ λΉν΄ μ½ 10λ°° μ λ λΉ λ₯Έ νΌν¬λ¨Όμ€λ₯Ό 보μ¬μ£Όλ©°, λ©λͺ¨λ¦¬ ν¨μ¨μ΄ ν¨μ¬ μ’μμ‘λ€.
μ΄λ¬ν νΉμ± λλ¬Έμ Spring μμλ SLF4J μ Logback μ μ±ννκ³ μλ€.
Logback νΉμ§
Logback μ λ‘κ·Έμ νΉμ λ 벨μ μ€μ ν μ μλλ°, μ€μ΄μκ³Ό ν μ€νΈ μν©μμ κ°κ° λ€λ₯Έ μΆλ ₯ λ 벨μ μ€μ νμ¬ λ‘κ·Έλ₯Ό νμΈν μ μλ€.
νΉν ν
μ€νΈμμ μ¬μ©ν κ²½μ° μμΈν λ΄μ©μ νμ
ν΄μ κ°λ°μ μμ 보μν΄μΌ νκΈ° λλ¬Έμ Debug
λ 벨μ μμ£Ό μ¬μ©νλ€.
λν, μΆλ ₯ λ°©μμ λν΄ μ€μ ν μ μλ€. μ½μ, νμΌ, λ©μΌ, DB λ± μ μ₯νκ³ μ νλ μμΉλ₯Ό μ§μ νμ¬ λ‘κ·Έ νμΌμ μ μ₯ν μ μλ€.
λ³λμ νλ‘κ·Έλ¨ μμ΄ μ체μ μΌλ‘ λ‘κ·Έ μμΆμ μ§μνλ©°, λ‘κ·Έ λ³΄κ΄ κΈ°κ°μ μ€μ ν μ μλ€.
λΏλ§ μλλΌ, μ€μ νμΌμ μΌμ μκ°λ§λ€ μ€μΊνμ¬ μ ν리μΌμ΄μ μ€λ¨ μμ΄ μ€μ λ³κ²½ κ°λ₯νλ€λ μ₯μ λ μ‘΄μ¬νλ€.
λ‘κ·Έ λ 벨
λ‘κΉ μμ λ‘κ·Έ λ 벨μ ν΅ν΄ λ¨κΈ°κ³ μΆμ λ‘κ·Έμ λ¨κ³λ₯Ό μ§μ ν μ μλ€.
μ΄λ ν¬κ² 6κ°μ§λ‘ μ΄λ£¨μ΄μ Έ μμΌλ©° μ€μ λ‘ νλ‘λμ
μμ λ§μ΄ μ°Ύμ μ μλ λ 벨μ Error
Warn
Info
μ λκ° μλ€.
λ 벨 | μ€λͺ |
---|---|
Fatal | λ§€μ° μ¬κ°ν μλ¬. νλ‘κ·Έλ¨μ΄ μ’ λ£λλ κ²½μ°κ° λ§μ. |
Error | μλνμ§ μμ μλ¬κ° λ°μν κ²½μ°. νλ‘κ·Έλ¨μ΄ μ’ λ£λμ§ μμ. |
Warn | μλ¬κ° λ μ μλ μ μ¬μ κ°λ₯μ±μ΄ μλ κ²½μ°. |
Info | λͺ νν μλκ° μλ μλ¬. μꡬμ¬νμ λ°λΌ μμ€ν λμμ 보μ¬μ€ λ. |
Debug | Info λ λ²¨λ³΄λ€ λ μμΈν μ λ³΄κ° νμν κ²½μ°. Dev νκ²½μμ μ¬μ©. |
Trace | Debug λ λ²¨λ³΄λ€ λ μμΈν¨. Dev νκ²½μμ λ²κ·Έλ₯Ό ν΄κ²°νκΈ° μν΄ μ¬μ©. |
Logback ꡬ쑰
logback-core
λ€λ₯Έ λ λͺ¨λμ μν κΈ°λ° μν μ νλ λͺ¨λμ΄λ©°, Appender μ Layout μΈν°νμ΄μ€κ° μ΄ λͺ¨λμ μνλ€.
μ μ¬μ§μ Appender μ ꡬ쑰λ₯Ό λμνν κ²μ΄λ€.
logback-classic
logback-core
μμ νμ₯λ λͺ¨λλ €λ‘ logback-core
μ SLF4J API λ₯Ό κ°μ§κ³ μλ€.
Logger
ν΄λμ€κ° μ΄ λͺ¨λμ μνλ€.
logback-access
Servlet Container μ ν΅ν©λμ΄ HTTP μμΈμ€μ λν λ‘κΉ κΈ°λ₯μ μ 곡νλ€.
μΉ μ ν리μΌμ΄μ λ λ²¨μ΄ μλ 컨ν μ΄λ λ 벨μμ μ€μΉ λμ΄μΌνλ€.
Logback μ€μ
Logback μ€μ νμΌ νμ
μΌλ°μ μΌλ‘ Classpath μ μλ logback μ€μ νμΌμ μ°Έμ‘°νκ² λλ€.
- Java Legacy, Spring κ°μ κ²½μ°
logback.xml
μ°Έμ‘° - Spring Boot μ κ²½μ°
logback-spring.xml
μ°Έμ‘°
Logback μ€μ μμ
Logback μ μ€μ μμλ ν¬κ² 3κ°μ§λ‘ λΆλ₯λλ€.
Logger
μ΄λ»κ² κΈ°λ‘ν κΉ?- μ€μ λ‘κΉ μ μννλ ꡬμ±μμμ΄λ©°, μΆλ ₯ λ 벨 μ‘°μ μ΄ κ°λ₯νλ€.
Appender
μ΄λμ κΈ°λ‘ν κΉ?- λ‘κ·Έ λ©μμ§κ° μΆλ ₯ν λμ κ²°μ νλ€.
Layout
μ΄λ»κ² μΆλ ₯ν κΉ?- Encoder(Layout) λ‘λ λΆλ¦¬λ©°, Appender μ ν¬ν¨λλ€.
- μ¬μ©μκ° μ§μ ν νμμΌλ‘ ννλ λ‘κ·Έ λ©μμ§λ₯Ό λ³ννλ μν μ μννλ€.
Appender
Log μ νν λ° μΆλ ₯ μμΉλ₯Ό μ€μ νκΈ° μν μμμ΄λ€. Logback μ μ΄ 5κ°μ§μ Appender λ₯Ό μ§μνλλ° μ΄λ μλμ κ°λ€.
ConsoleAppender
μ½μμ λ‘κ·Έ μΆλ ₯FileAppender
νμΌμ λ‘κ·Έ μ μ₯RollingFileAppender
μ¬λ¬ κ°μ νμΌμ μννλ©° λ‘κ·Έ μ μ₯SMTPAppender
λ‘κ·Έλ₯Ό λ©μΌλ‘ 보λDBAppender
DB μ λ‘κ·Έ μ μ₯
Encoder
Appender λ΄μ ν¬ν¨λλ νλͺ©μ΄λ©°, pattern μ μ¬μ©νμ¬ μνλ νμμΌλ‘ λ‘κ·Έλ₯Ό ννν μ μλ€.
Root
μ€μ ν Appender λ₯Ό μ°Έμ‘°ν΄μ λ‘κ·Έ λ 벨μ μ€μ ν μ μμ
root λ μ μ μ€μ , μ§μ μ€μ μ νκΈ° μν΄μ logger λ₯Ό μ¬μ©
Pattern
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger %msg%n</patern>
%Logger{length}
Logger Name%-5level
λ‘κ·Έ λ 벨, -5 λ μΆλ ₯μ κ³ μ ν κ°%msg
λ‘κ·Έ λ©μμ§ μμ (==%message){PID:-}
νλ‘μΈμ€ Id%d
λ‘κ·Έ κΈ°λ‘ μκ°%p
λ‘κΉ λ 벨%F
λ‘κΉ μ΄ λ°μν νλ‘κ·Έλ¨ νμΌλͺ%M
λ‘κΉ μ΄ λ°μν λ©μλμ μ΄λ¦%I
λ‘κΉ μ΄ λ°μν νΈμΆμ§μ μ 보%L
λ‘κΉ μ΄ λ°μν νΈμΆμ§μ λΌμΈ μ%thread
νμ¬ Thread λͺ%t
λ‘κΉ μ΄ λ°μν Thread λͺ%c
λ‘κΉ μ΄ λ°μν μΉ΄ν κ³ λ¦¬%C
λ‘κΉ μ΄ λ°μν ν΄λμ€ λͺ%m
λ‘κ·Έ λ©μμ§%n
μ€λ°κΏ%%
% μΆλ ₯%r
μ΄ν리μΌμ΄μ μ€ν ν λ‘κΉ μ΄ λ°μν μμ κΉμ§μ μκ°
νλ‘μ νΈ μ μ©
μ λ‘κΉ μ ν΄μΌν κΉ?
λ‘κΉ μ μ μ©νκΈ°μ μμ λ‘κΉ μ μ μ μ©ν΄μΌ νλκ°μ λν μλ Όμ΄ νμνλ€.
λ‘κΉ μ λ§ κ·Έλλ‘ κΈ°λ‘μ λ¨κΈ°λ νμμ΄λ€. κ·Έλ λ€λ©΄ μ°λ¦¬λ 무μμ μ΄λ£¨μ΄λ΄κΈ° μν΄ κΈ°λ‘μ νλ κ²μΌκΉ?
λ¨Όμ κ°λ°μ μ²μλΆν° μλ²½ν μ μλ€λ κ²μ μΈμ νλ κ²μμ μμνλ€.
μ ν리μΌμ΄μ μ κ°λ°νκ³ λ°°ν¬ν λ€ μ΄μνλ κ³Όμ μμ 무μμ λ κ°μ ν΄μΌ ν μ§ λ ΌμνκΈ° μν΄μ μ΄μνλ λμμ κΈ°λ‘μ΄ νμνλ€.
μ΄ λ μ¬μ©λλ κ²μ΄ μ΄μνλ©° μμΈ μλ§μ λ‘κ·Έλ€μ΄ λ κ²μ΄λ€.
κΈ°λ‘λ λ‘κ·Έλ€μ ν λλ‘ μλ²λ₯Ό μ¦μ€νκ±°λ λ‘μ§μ κ°μ νλ λ± μΆν λ°©ν₯μ±μ΄ κ²°μ λλ κ²μ΄λ€.
μ΄λ€ κ²μ λ‘κ·Έλ‘ λ¨κ²¨μΌν κΉ?
νλ‘μ νΈμ Logback μ μ μ©νλ©΄μ μ΄λ€ λΆλΆμ λ‘κ·Έλ₯Ό λ¨κ²¨μΌνλκ°μ λν΄ λ§μ΄ κ³ λ―Όνκ² λμλ€.
κ²°λ‘ μ μΌλ‘ μλμ κ°μ κ²λ€μ λ‘κΉ νκΈ°λ‘ κ²°μ νλ€.
- μμ²κ³Ό μλ΅μ λν λ‘κΉ
- μλν μμΈλ€μ λν λ‘κΉ
- μλνμ§ μμ μμΈλ€μ λν λ‘κΉ
μμ²κ³Ό μλ΅μ λν λ‘κΉ κ³Ό μλν μμΈλ€μ λν λ‘κΉ μ ν΅ν΄ μ¬μ©μκ° μ ν리μΌμ΄μ μ μ¬μ©νλ©΄μ κ²ͺμ μ μλ μμ€ν νλ¦μ ν΅κ³λ₯Ό λΆμν μ μλ€. μ΄λ₯Ό λ°νμΌλ‘ μ΄λ€ λΆλΆμ κ°μ ν΄μΌ ν μ§ νμΈν μ μλ€.
λν, μΈλΆ API λ₯Ό μ¬μ©νλ λ± μμν μ μλ μμΈλ€μ λ‘κΉ νμ¬ μ§μμ μΌλ‘ μΈλΆ API λ₯Ό μ¬μ©ν κ²μΈκ°, λλ μ΄λμμ λμΉ λΆλΆμ΄ μλμ§ νμΈν μ μλ€.
λ‘κ·Έ λ 벨μ κΈ°μ€μ?
λ‘κ·Έ λ 벨μ κΈ°μ€μ ν λ°μ΄ ν, μ¬λ λ°μ΄ μ¬λμΌ κ²μ΄λ€. λ¬Όλ‘ κ³΅μνλ λ¬Έμλ μ‘΄μ¬νμ§λ§, μκ²¬μ΄ λΆλΆν μ μλ λΆλΆμ΄λ€.
μ΄λ κ²°κ΅ μ¬μ©νλ μͺ½μμ μ΄λ»κ² ꡬλΆν κ²μΈκ°μ λν΄ μ νλ κ²μ΄κΈ° λλ¬Έμ μλ§κ² 컀μ€ν νμ¬ μ¬μ©νλ κ²μ΄ μ’μ κ²μ΄λΌ μκ°νλ€.
μ°λ¦¬ νμ μλλ μ°λ¦¬ νμμ μ ν λ‘κ·Έ λ 벨μ κΈ°μ€μ΄λ€.
Error
μΈλΆ λΌμ΄λΈλ¬λ¦¬ μμΈ νΉμ μμνμ§ λͺ»ν μμΈWarn
νμμ μμνλ μ¬μ©μ νλ‘μ°μμ λ²μ΄λ μμΈ (Postman, curl λ±)Info
μ μμ μΈ μ¬μ© μ λ°μν μ μλ μμΈ