본문 바로가기
Programming/python

logging config 사용하기

by 유주원 2023. 1. 9.

python에서는 log config를 활용해서 코드 상에서의 로그 설정 없이 로그를 설정 할 수가 있다.

 

우선 아래와 같은 로그 파일을 생성한다.

 

[loggers]
keys=root,test1Logger,test2Logger

[handlers]
keys=streamHandler,fileHandler, rotatingFileHandler

[formatters]
keys=simpleFormatter,complexFormatter

[formatter_simpleFormatter]
format=[%(name)s] %(message)s

[formatter_complexFormatter]
format=%(asctime)s %(levelname)s [%(name)s] [%(filename)s:%(lineno)d] - %(message)s

[logger_root]
level=NOTSET
handlers=

[logger_test1Logger]
level=INFO
handlers=rotatingFileHandler
qualname=test1
propagate=1

[logger_test2Logger]
level=INFO
handlers=rotatingFileHandler
qualname=test2
propagate=1

[handler_streamHandler]
class=StreamHandler
formatter=simpleFormatter
args=(sys.stdout, )

[handler_fileHandler]
class=FileHandler
args=("test.log",)
formatter=complexFormatter
level=INFO

[handler_rotatingFileHandler]
class=handlers.RotatingFileHandler
formatter=complexFormatter
args=('test.log', 'a', 104857600, 10)

 

logger 항목에는 내가 쓰고자 하는 log 명을 입력한다. (ex. root, test1Logger, test2Logger)

위의 코드에서 test1Logger 항목으로 들어가보면 level, handlers, qualname, propagate 설정 값이 있는 것을 확인할 수 있으며, level은 해당 로그가 찍히기 위한 최소 레벨 값, handler를 로그를 설정하기 위한 처리 핸들러를 등록한다.

qualname의 경우 실제 python 코드 상에서 해당 이름의 로그를 호출하면 ex)test1 logger_test1Logger 항목의 설정 값들을 가져와서 로그를 설정할 수가 있다. propagate가 1로 설정되면 부모 handler에 설정되어 있는 handler 이벤트까지 실행시킬 수가 있다. 

 

실제 python 코드에서는 아래와 같이 호출해서 위의 log.conf 파일을 호출 할 수가 있다.

 

import logging.config

logging.config.fileConfig("log.conf")
log = logging.getLogger("test1)

log.info("test")