본문 바로가기

Python

로깅

728x90

1. stream에 로그 남기기

import logging

logging.info('my INFO log')
logging.warning('my WARNING log')
# WARNING:root:my WARNING log

위 코드를 실행하면 warning level만 출력되는 이유는? logging의 default log level이 warning으로 되어있기 때문이다.
다음처럼 logging의 basicConfig level을 변경하면 된다. 모든 log를 출력하고자 할 때는 level을 debug로 지정한다.

로그 레벨 피라미드, 가장 낮은 Debug 레벨은 모든 로그를 출력

import logging

logging.basicConfig(level=logging.DEBUG)

logging.info('my INFO log')
logging.warning('my WARNING log')
# INFO:root:my INFO log
# WARNING:root:my WARNING log

 

2. file에 로그 남기기
- basicConfig의 filename을 설정하면 해당 위치에 로그 파일이 생성된다.
- 해당 파일을 열어보면 log가 append 되는 것을 확인할 수 있다(내용이 덮어 씌워지는 것이 아니라, 기존 로그에 이어서 로그가 누적된다).

import logging

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

logging.info('my INFO log')
logging.warning('my WARNING log')
# INFO:root:my INFO log
# WARNING:root:my WARNING log

 

3. stream과 file에 동시에 로그 남기기

  1. logging.getLogger(__name__)으로 logger instance를 생성한다.
  2. stream과 file에 로그를 남기는 handler를 생성한다.
  3. logger instance에 stream과 file handler를 설정한다.
  4. logger instance로 log를 찍는다.
import logging
import logging.handlers

# logger 인스턴스를 생성 및 로그 레벨 설정
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)

# fileHandler와 StreamHandler를 생성
fileHandler = logging.FileHandler('./server.log')
streamHandler = logging.StreamHandler()

# Handler를 logging에 추가
logger.addHandler(fileHandler)
logger.addHandler(streamHandler)

# logging 
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
logger.critical("critical")

로그 형식(formatting)
- formmater 생성 후, handler에 formmater 세팅

import logging
import logging.handlers

# logger 인스턴스를 생성 및 로그 레벨 설정
logger = logging.getLogger("crumbs")
logger.setLevel(logging.DEBUG)

# formmater 생성
formatter = logging.Formatter('[%(levelname)s|%(filename)s:%(lineno)s] %(asctime)s > %(message)s')

# fileHandler와 StreamHandler를 생성
fileHandler = logging.FileHandler('./log/my.log')
streamHandler = logging.StreamHandler()

# handler에 fommater 세팅
fileHandler.setFormatter(formatter)
streamHandler.setFormatter(formatter)

# Handler를 logging에 추가
logger.addHandler(fileHandler)
logger.addHandler(streamHandler)

# logging 
logger.debug("debug")
logger.info("info")
logger.warning("warning")
logger.error("error")
logger.critical("critical")

''' 
출력결과
[DEBUG|input.py:24] 2016-05-20 10:37:06,656 > debug
[INFO|input.py:25] 2016-05-20 10:37:06,657 > info
[WARNING|input.py:26] 2016-05-20 10:37:06,657 > warning
[ERROR|input.py:27] 2016-05-20 10:37:06,657 > error
[CRITICAL|input.py:28] 2016-05-20 10:37:06,657 > critical
'''

파일이 너무 큰 경우 자동으로 새로운 파일을 생성하기

# file max size를 10MB로 설정
file_max_bytes = 10 * 1024 * 1024

#fileHandler = logging.handlers.RotatingFileHandler(filename='./log/test.log', maxBytes=file_max_bytes, backupCount=10)

[출처]
https://inma.tistory.com/136
https://ourcstory.tistory.com/97
https://hamait.tistory.com/880 - 로깅의 모든것
https://jusths.tistory.com/1
https://blog.naver.com/PostView.nhn?isHttpsRedirect=true&blogId=wideeyed&logNo=221536682475

728x90

'Python' 카테고리의 다른 글

PyPy로 성능 향상시키기  (0) 2023.04.24
코드 실행시간 측정  (0) 2023.04.24
상위, 하위, 동일 폴더 내 모듈 from, import 하기  (0) 2023.04.24
특정기간 지난 파일 삭제  (0) 2023.04.24
사전(dict)  (0) 2023.04.24