목차
1. 로그 회전 설정
로그 회전은 로그 파일의 크기나 날짜에 따라 로그 파일을 관리하는 방법입니다.
로그가 증가하여 파일 크기가 너무 커지는 것을 방지하고, 오래된 로그를 정리하는 데 사용됩니다.
import logging
from logging.handlers import RotatingFileHandler
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
#로그 파일 생성 (1MB 크기로 로그 파일 3개까지 보관)
file_handler = RotatingFileHandler('/tmp/test_rotation.log', maxBytes=1024*1024, backupCount=3)
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logger = logging.getLogger('my_logger')
logger.addHandler(file_handler)
logger.info('로그 회전 설정 예제')
위 예제는 1MB이상의 로그가 기록되면 또 다른 새로운 로그파일을 생성하여 추가합니다.
이렇게 최대 파일은 3개가 생성되며, 3개 모두 꽉 차면 다시 첫 번째 파일을 지우고 생성합니다.
2. 다양한 로그 핸들러 활용(로그 기록 SMTP 서버 전송)
로그 핸들러를 사용하여 로그를 다양한 대상에 기록할 수 있습니다. 파일뿐만 아니라 콘솔, 이메일, 네트워크 등으로 로그를 전송할 수 있습니다.
import logging
from logging.handlers import RotatingFileHandler, SMTPHandler
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
#파일 핸들러 설정
file_handler = RotatingFileHandler('/tmp/test_rotation.log', maxBytes=1024*1024, backupCount=3)
file_handler.setLevel(logging.INFO)
file_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
#이메일 핸들러 설정
email_handler = SMTPHandler(mailhost=('smtp.example.com', 587),
fromaddr='sender@example.com',
toaddrs='receiver@example.com',
subject='Error in Application')
email_handler.setLevel(logging.ERROR)
email_handler.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s'))
logger = logging.getLogger('my_logger')
logger.addHandler(file_handler)
logger.addHandler(email_handler)
logger.error('다양한 로그 핸들러 활용 예제')
위 예제는 SMTP서버에 로그를 전송합니다.
자신의 SMTP 서버 연결 정보를 전달하면됩니다.
3. 로깅 메시지 필터링
필터를 사용하여 로깅 메시지를 특정 조건에 따라 걸러내거나 허용하는 방법을 보여주는 예제입니다.
import logging
class InfoFilter(logging.Filter):
def filter(self, record):
return record.levelno == logging.INFO
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
#필터 생성 및 추가
info_filter = InfoFilter()
logger = logging.getLogger('my_logger')
logger.addFilter(info_filter)
logger.debug('이 메시지는 출력되지 않습니다.')
logger.info('이 메시지는 출력됩니다.')
logger.warning('이 메시지 역시 출력되지 않습니다.')
4. 예외 처리 로깅
예외가 발생했을 때 로그를 기록하여 디버깅하는 방법을 보여주는 예제입니다.
import logging
logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')
try:
result = 10 / 0
except ZeroDivisionError as e:
# 예외가 발생하면 에러 로그를 남김
logging.exception('0으로 나누기 예외 발생')
print('예외 처리')
5. 로깅 설정 파일 사용
logging 모듈을 사용하여 로깅을 더 세부적으로 설정하기 위해 설정 파일을 사용하는 방법을 보여주는 예제입니다.
import logging
import logging.config
logging.config.fileConfig('logging_config.ini')
logger = logging.getLogger('my_logger')
logger.info('로깅 설정 파일 사용 예제')
위의 예제 코드들은 파이썬 logging 모듈을 사용하여 로그를 생성하고 관리하는 다양한 기능들을 보여줍니다.
로그는 프로그램을 디버깅하거나 운영 중 발생하는 문제를 파악하는 데 큰 도움이 됩니다.
반응형