티스토리 뷰

python lecture/basic

[edu] logging (로깅)

burningrizen 2019. 2. 25. 16:10


파이썬에서는 로그 출력을 위한 logging 모듈을 제공합니다.


아주 간단히 사용할 수 있으며


print 함수등을 콘솔에 출력하는 것보다 효율 적입니다.



[로그레벨]


파이썬에서는 안드로이드와 거의 동일한 로그 레벨을 제공합니다.


DEBUG

INFO

WARNING

ERROR

CRITICAL





[간단한 logging 모듈 사용 예제]

import logging as log

log.basicConfig(filename='./log.txt', level=log.DEBUG)

if __name__ == '__main__':
log.debug('debug')
log.info('info')
log.warning('warning')
log.error('error')
log.critical('critical')

basicConfig  함수를 통해서 filemode 를 a, w 등으로 지정할 수 있다. 


a 는 append 즉 기존파일에 이어서 기록하고 w 는 기존파일을 삭제하고 새로 작성한다.




[콘솔창과 파일에 동시에 로그 남기기]

import logging
import logging.handlers

log = logging.getLogger('log_name')
log.setLevel(logging.DEBUG)

fileHandler = logging.FileHandler('./log.txt')
streamHandler = logging.StreamHandler()

log.addHandler(fileHandler)
log.addHandler(streamHandler)

if __name__ == '__main__':
log.debug('debug')
log.info('info')
log.warning('warning')
log.error('error')
log.critical('critical')


[Formatter 적용하기]

import logging
import logging.handlers

log = logging.getLogger('log_name')
log.setLevel(logging.DEBUG)

formatter = logging.Formatter('[%(levelname)s] (%(filename)s:%(lineno)d) > %(message)s')

fileHandler = logging.FileHandler('./log.txt')
streamHandler = logging.StreamHandler()

fileHandler.setFormatter(formatter)
streamHandler.setFormatter(formatter)

log.addHandler(fileHandler)
log.addHandler(streamHandler)

if __name__ == '__main__':
log.debug('debug')
log.info('info')
log.warning('warning')
log.error('error')
log.critical('critical')


Formatter Keywords

이름포맷설명
asctime%(asctime)s날짜 시간, 밀리세컨드까지 출력. ex) 2017.11.17 12:31:45,342
created%(created)f생성 시간 출력
filename%(filename)s파일명
funcnName%(funcName)s함수명
levelname%(levelname)s로그 레벨(DEBUG, INFO, WARNING, ERROR, CRITICAL)
levelno%(levelno)s로그 레벨을 수치화해서 출력(10, 20, 30, …)
lineno%(lineno)d소스의 라인 넘버
module%(module)s모듈 이름
msecs%(msecs)d로그 생성 시간에서 밀리세컨드 시간 부분만 출력
message%(message)s로그 메시지
name%(name)s로그 이름
pathname%(pathname)s소스 경로
process%(process)d프로세스(Process) ID
processName%(processName)s프로세스 이름
thread%(thread)dThread ID
threadName%(threadName)sThread Name




[파일의 최대 용량 및 새로운 파일 생성하는 방법]


RotatingFileHandler 함수를 이용해서 파일의 최대 크기 및 새로운 파일을 생성할 때 최대 개수를 지정해줄수 있다.


아래와 같이 코드를 이용해서 최대 10MB, 총 20개의 로그 파일을 만들어서 순회 하도록 해보자


log_max_size = 10 * 1024 * 1024
log_file_count = 20
fileHandler = logging.handlers.RotatingFileHandler(filename='./log.txt', maxBytes=log_max_size,
backupCount=log_file_count)



[logging.handlers]


위에서는 FileHander 와 StreamingHandler 및 RotatingFileHandler 등을 사용했었는데 이외에도 다양한 핸들러들이 존재한다.


핸들러설명
SocketHandler외부 로그 서버로 소켓을 통해 전송
DatagramHandlerUDP 통신을 통해 외부 서버로 전송
SysLogHandlerUnix 류의 syslog 데몬에게 로그 전송
SMTPHandler메일로 로그 전송
HTTPHandlerHTTP를 통해 로그 전송



'python lecture > basic' 카테고리의 다른 글

[edu] for문 (반복문, range)  (0) 2019.02.28
[edu] attribute (속성)  (0) 2019.02.26
[edu] duck typing(덕 타이핑)  (0) 2019.02.25
[edu] Stack/Queue (스택/큐 자료구조)  (0) 2019.02.24
[edu] 클래스(class)  (0) 2019.02.24
댓글