<aside>
</aside>
μλ
νμΈμ! μ§κΈκΉμ§ μ°λ¦¬λ loguruκ° μΆλ ₯νλ λ©μ§ λ‘κ·Έλ€μ ν°λ―Έλ νλ©΄μμλ§ λ§λλ΄€μ΄μ. νμ§λ§ ν°λ―Έλμ λλ©΄ λ‘κ·Έλ ν¨κ» μ¬λΌμ Έ λ²λ¦¬μ£ . π¬οΈ μ€μ μλΉμ€μμλ λμ€μλΌλ λ¬Έμ κ° μκ²Όμ λ μμΈμ λΆμνκΈ° μν΄ λ‘κ·Έλ₯Ό μ΄λκ°μ 차곑차곑 μμλμ΄μΌ ν©λλ€.
μ΄λ² μ±ν°μμλ loguruμ μ¬μ₯κ³Όλ κ°μ logger.add() λ©μλλ₯Ό ν΅ν΄, μ¬λΌμ§μ§ μλ λ‘κ·Έ, μ¦ νμΌμ λ‘κ·Έλ₯Ό κΈ°λ‘νλ λ°©λ²μ λ°°μλ³΄κ² μ΅λλ€. λ‘κ·Έκ° νλ¬κ°λ μ΅μ’
λͺ©μ μ§λ₯Ό μλ―Ένλ 'μ±ν¬(Sink)'λΌλ μλ‘μ΄ κ°λ
λ ν¨κ» λ§λλ³Ό κ±°μμ. μ΄μ μ¬λ¬λΆμ λ‘κ·Έλ λ¨μν νλ©΄ μΆλ ₯μ λμ΄ μμμ±μ κ°κ² λ κ²λλ€!
μ΄λ² μ±ν°λ₯Ό λ§μΉλ©΄ μ¬λ¬λΆμ λ€μμ ν μ μκ² λ κ±°μμ!
loguruμ λͺ¨λ μ€μ μ κ΄μ₯νλ ν΅μ¬ ν¨μ, logger.add()μ μν μ μ΄ν΄ν©λλ€.logger.add("νμΌμ΄λ¦.log") νμμΌλ‘ λ‘κ·Έλ₯Ό νμΌμ μ μ₯ν μ μμ΅λλ€.logger.remove()λ₯Ό μ¬μ©νμ¬ κΈ°λ³Έ μ½μ μΆλ ₯μ μ κ±°νκ³ , μ€λ³΅ λ‘κΉ
μ λ°©μ§ν μ μμ΅λλ€.file_logging.py νμΌμ μλ‘ μΆκ°νμ¬ μ€μ΅μ μ§νν©λλ€. μ½λλ₯Ό μ€ννκ³ λλ©΄, νλ‘μ νΈ ν΄λμ my_app.logλΌλ λ‘κ·Έ νμΌμ΄ λ§λ²μ²λΌ μμ±λ κ±°μμ!
νλ‘μ νΈ κ΅¬μ‘°
loguru-course/
βββ venv/
βββ requirements.txt
βββ ... (μ΄μ κ°μ νμΌλ€)
βββ file_logging.py <- μλ‘ μΆκ°λ νμΌ!
βββ my_app.log <- μ½λ μ€ν ν μμ±λ νμΌ!
file_logging.py μ 체 μ½λ
# file_logging.py
import sys
from loguru import logger
# 1. κΈ°λ³Έ νΈλ€λ¬(μ½μ μΆλ ₯)λ₯Ό κΉλνκ² μ κ±°ν©λλ€.
# μ΄λ κ² ν΄μΌ μ°λ¦¬κ° μνλ μ±ν¬λ§ μ μ΄ν μ μμ΅λλ€.
logger.remove()
# 2. νμΌ μ±ν¬(Sink)λ₯Ό μΆκ°ν©λλ€.
# level="INFO"λ‘ μ€μ νμ¬, INFO λ 벨 μ΄μμ μ€μν λ‘κ·Έλ§ νμΌμ κΈ°λ‘ν©λλ€.
logger.add("my_app.log", level="INFO")
# 3. μ½μ μ±ν¬(Sink)λ₯Ό λ€μ μΆκ°ν©λλ€.
# level="DEBUG"λ‘ μ€μ νμ¬, κ°λ° μ€μλ DEBUG λ 벨κΉμ§ μμΈν λ‘κ·Έλ₯Ό μ½μμμ νμΈν©λλ€.
logger.add(sys.stderr, level="DEBUG")
def process_user_data(user_id, data):
logger.debug(f"μ¬μ©μ '{user_id}'μ λ°μ΄ν° μ²λ¦¬ μμ...")
if len(data) < 5:
logger.warning(f"μ¬μ©μ '{user_id}'μ λ°μ΄ν° '{data}'κ° λ무 μ§§μ΅λλ€. (κΈΈμ΄: {len(data)})")
logger.info(f"μ¬μ©μ '{user_id}'μ λ°μ΄ν° μ²λ¦¬κ° μλ£λμμ΅λλ€.")
if __name__ == "__main__":
logger.info("--- μ ν리μΌμ΄μ
μ€ν ---")
process_user_data("user123", "test")
process_user_data("user456", "long_enough_data")
logger.success("--- μ ν리μΌμ΄μ
μ±κ³΅μ μΌλ‘ μ’
λ£ ---")