Python 로그를 남기는 Logbook 라이브러리 알아보기

오늘은 Python으로 로그를 남길 수 있는 Logbook를 알아보려 합니다.

Logbook 설치

우선 virtualenv로 파이썬 환경을 분리해줍니다.

pip3 install virtualenv
virtualenv -mvenv env

env라는 이름의 가상 환경을 생성합니다.

source env/bin/activate

가상환경을 폴더에서 활성화합니다.

pip3 install --upgrade pip

pip의 업그레이드가 존재하는지 확인하고 진행합니다.

pip install Logbook

pip로 Logbook을 설치합니다.

stream handler

import sys
from logbook import Logger, StreamHandler

형식화된 로깅 레코드를 스트림에 쓰는 StreamHandler를 사용할 수 있습니다.

sys.stdout 이나 sys.stderr를 사용할 수 있습니다.

log = Logger('Stream handler logger')

Logger 객체를 생성합니다.

StreamHandler(sys.stdout).push_application()

컨텍스트 객체를 응용 프로그램 스택에 푸시합니다.

log.warn('warning')
log.error("error")

로그 객체로 warning과 error 레벨의 로그를 남길 수 있습니다.

stderr handler

from logbook import StderrHandler

stderr에 있는 것을 기록하는 핸들러인 StderrHandler를 사용할 수 있습니다.

handler = StderrHandler()

StderrHandler 객체를 생성합니다.

handler.format_string = '{record.channel}: {record.message}'
handler.push_application()

출력형식을 지정하고, 컨텍스트 객체를 응용 프로그램 스택에 푸시합니다.

log.warn('warning')
log.error("error")

로그 객체로 warning과 error 레벨의 로그를 남길 수 있습니다.

file handler

import logbook

logbook을 가져옵니다.

only_debug = logbook.FileHandler('./debug.log', filter=lambda r, h: r.extra['debug'])
everything = logbook.FileHandler('./all.log', bubble=True)

파일을 열고 닫는 핸들러를 만들 수 있습니다.

람다로 특정 로그만 필터링할 수도 있습니다.

with only_debug, everything:
    logbook.info('this is debug code', extra={'debug': True})
    logbook.info('this is not debug code')

로그를 출력해보면 FileHandler에 의해 파일로 저장됩니다.

Written on June 7, 2019