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

오늘은 Python에 기본적으로 설치되어 있는 표준 라이브러리인 logging에 대하여 알아보려 합니다.

logging 설치

기본적으로 logging은 설치되어 있습니다.

basic

import logging

logging.warning('warning text!')
logging.info('information text')

a = "a"
b = "b"
logging.warning('%s and %s', a, b)

처음 로그를 출력하면 warning만 출력됩니다.

log file

import logging

logging.basicConfig(filename='./file.log', filemode='w', level=logging.DEBUG)
logging.debug('write debug text')
logging.info('write information text')
logging.warning('write warning text')

파일로 로그를 저장할 수 있으며, 이 역시 저장할 레벨을 지정할 수 있습니다.

format

import logging

logging.basicConfig(
    format='%(levelname)s[%(asctime)s]:%(message)s ', level=logging.DEBUG)
logging.debug('debug text')
logging.info('information text')
logging.warning('warning text')

basicConfig로 출력할 로그의 포맷도 지정할 수 있습니다.

logger

import logging

logger = logging.getLogger('hello_logger')
logger.setLevel(logging.DEBUG)

ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

ch.setFormatter(
    logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))

logger.addHandler(ch)

logger.debug('debug text')
logger.info('information text')
logger.warning('warning text')
logger.error('error text')
logger.critical('critical text')

이름 있는 Logger 객체를 만들어서 출력 레벨과 포맷들을 설정한 핸들러로 로거에 등록할 수 있습니다.

file config

[loggers]
keys=root,loggersExample

[handlers]
keys=consoleHandler

[formatters]
keys=formattersExample

[logger_root]
level=DEBUG
handlers=consoleHandler

[logger_loggersExample]
level=DEBUG
handlers=consoleHandler
qualname=loggersExample

[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=formattersExample
args=(sys.stdout,)

[formatter_formattersExample]
format=[%(levelname)s]%(asctime)s - %(name)s : %(message)s
datefmt=

위와 같이 파일로 작성해두면 언제든지 외부에서 로거의 설정 값을 변경할 수 있습니다.

import logging
import logging.config

logging.config.fileConfig('logging.conf')

logger = logging.getLogger('file config')

logger.debug('debug text')
logger.info('info text')
logger.warning('warning text')
logger.error('error text')
logger.critical('critical text')

불러올 설정 파일을 지정하고, 로거를 만들면 됩니다.

Written on June 6, 2019