파이썬의 logging 모듈을 사용하여 로그 파일을 일자별로 생성하려면, TimedRotatingFileHandler를 사용하는 것이 좋습니다. 이 핸들러는 지정된 간격에 따라 로그 파일을 새로 만들고, 이전 로그 파일의 이름 뒤에 타임스탬프를 붙여 구분합니다. 일자별 로그 파일 생성을 위한 사용자 정의 로깅 클래스 예시는 다음과 같습니다.

 

import logging
from logging.handlers import TimedRotatingFileHandler
import os

class DailyLogger:
    def __init__(self, name, log_dir='logs', level=logging.DEBUG):
        # 로그 파일 디렉터리 확인 및 생성
        if not os.path.exists(log_dir):
            os.makedirs(log_dir)
        
        # 로그 파일 경로 설정
        log_file_path = os.path.join(log_dir, f"{name}.log")
        
        # 로거 생성 및 레벨 설정
        self.logger = logging.getLogger(name)
        self.logger.setLevel(level)
        
        # 일자별로 로그 파일을 생성하는 핸들러 설정
        file_handler = TimedRotatingFileHandler(log_file_path, when="midnight", interval=1, backupCount=7)
        file_handler.setLevel(level)
        
        # 로그 포맷 설정
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        file_handler.setFormatter(formatter)
        
        # 핸들러를 로거에 추가
        self.logger.addHandler(file_handler)
        
    def get_logger(self):
        """
        구성된 로거 객체 반환
        """
        return self.logger

 

이 클래스는 로그 파일을 매일 자정에 새로 생성하도록 설정됩니다. backupCount=7은 로그 파일을 최대 7개까지 보관하고, 이를 초과하면 가장 오래된 파일부터 삭제한다는 것을 의미합니다. 로그 디렉터리는 생성자에서 log_dir 인자를 통해 지정할 수 있으며, 기본값은 현재 작업 디렉터리 내의 logs 폴더입니다.

사용 예시는 다음과 같습니다:

# DailyLogger 인스턴스 생성 및 로거 가져오기
daily_logger = DailyLogger(name='MyDailyLogger', log_dir='my_logs', level=logging.INFO).get_logger()

# 로깅 메시지 기록
daily_logger.info('정보 메시지입니다.')

 

이 코드를 실행하면, my_logs 디렉터리 내에 MyDailyLogger.log 파일이 생성되고, 매일 자정마다 새로운 로그 파일로 전환됩니다. 파일 이름은 자동으로 날짜가 추가되어 구분됩니다.

'python > logging' 카테고리의 다른 글

Custom Logger 만들기 1  (0) 2024.03.29
logging 설정하는 방법  (0) 2024.03.14

파이썬에서 로깅(logging)은 애플리케이션의 실행 상태에 대한 정보를 기록하는 중요한 기능입니다. logging 모듈을 사용하면 콘솔, 파일, 웹 서버 등 다양한 대상에 로그를 출력할 수 있습니다. 사용자 정의 로깅 클래스를 만드는 기본적인 예시입니다.

 

먼저, 파이썬의 logging 모듈을 사용하여 로거(logger), 핸들러(handler), 포매터(formatter)를 설정하는 사용자 정의 클래스를 만듭니다. 이 클래스는 로깅을 쉽게 설정하고 사용할 수 있도록 도와줍니다.

 

import logging

class MyLogger:
    def __init__(self, name, level=logging.DEBUG, file_name='app.log'):
        # 로거 생성
        self.logger = logging.getLogger(name)
        self.logger.setLevel(level)  # 로그 레벨 설정
        
        # 파일 핸들러 생성 및 설정
        file_handler = logging.FileHandler(file_name)
        file_handler.setLevel(level)
        
        # 콘솔 핸들러 생성 및 설정
        console_handler = logging.StreamHandler()
        console_handler.setLevel(level)
        
        # 로그 포맷 설정
        formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
        file_handler.setFormatter(formatter)
        console_handler.setFormatter(formatter)
        
        # 핸들러를 로거에 추가
        self.logger.addHandler(file_handler)
        self.logger.addHandler(console_handler)
    
    def get_logger(self):
        """
        구성된 로거 객체 반환
        """
        return self.logger

 

이 클래스를 사용하여 로깅을 설정하고 메시지를 기록하는 방법은 다음과 같습니다:

# MyLogger 인스턴스 생성
my_logger = MyLogger(name='MyAppLogger', level=logging.INFO).get_logger()

# 로깅 메시지 기록
my_logger.debug('디버그 메시지입니다.')
my_logger.info('정보 메시지입니다.')
my_logger.warning('경고 메시지입니다.')
my_logger.error('에러 메시지입니다.')
my_logger.critical('치명적인 에러 메시지입니다.')

 

이 코드는 MyAppLogger라는 이름의 로거를 생성하고, 로그 메시지를 파일(app.log)과 콘솔에 출력합니다. 로그 메시지에는 발생 시간, 로거 이름, 로그 레벨, 메시지가 포함됩니다.

로깅 레벨은 다음과 같은 순서로 정의됩니다: DEBUG < INFO < WARNING < ERROR < CRITICAL. level 파라미터를 통해 설정한 레벨 이상의 메시지만 출력됩니다. 위 예시에서는 level=logging.INFO로 설정했기 때문에, debug 메시지는 출력되지 않습니다.

'python > logging' 카테고리의 다른 글

Custom Logger 만들기 2 (일자별로 log 파일 생성)  (0) 2024.03.29
logging 설정하는 방법  (0) 2024.03.14

 

1. Python 파일에서 직접 로깅을 사용하는 방법 

 

먼저, logging 모듈을 임포트합니다:

import logging

로깅을 설정합니다. 이는 로그 파일의 경로, 로그 레벨, 출력 형식 등을 지정하는 것입니다. 예를 들어, 다음과 같이 설정할 수 있습니다:

logging.basicConfig(filename='example.log',
      level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

위 코드는 로그를 파일 example.log에 기록하며, 로그 레벨은 DEBUG부터 표시됩니다. 로그의 포맷은 시간, 로그 레벨, 메시지를 포함합니다.

 

로그 메시지를 출력합니다. 이는 logging 모듈의 다양한 함수를 사용하여 수행할 수 있습니다. 예를 들어

logging.debug('이것은 디버그 메시지입니다.')
logging.info('이것은 정보 메시지입니다.')
logging.warning('이것은 경고 메시지입니다.')
logging.error('이것은 에러 메시지입니다.')
logging.critical('이것은 심각한 에러 메시지입니다.')

 

 

위와 같이 로깅을 설정하고 메시지를 출력하면, 각 메시지는 설정한 로그 레벨에 따라 출력됩니다. 예를 들어, 위 코드에서는 DEBUG 레벨부터 심각한 에러인 CRITICAL 레벨까지 모든 메시지가 출력됩니다.

 

로깅에 대한 더 자세한 정보는 Python 공식 문서를 참조하십시오: https://docs.python.org/3/library/logging.html

 

logging — Logging facility for Python

Source code: Lib/logging/__init__.py Important: This page contains the API reference information. For tutorial information and discussion of more advanced topics, see Basic Tutorial, Advanced Tutor...

docs.python.org

 

2. logging 을 파일과 콘솔 두군데 동시에 출력하기

logging 모듈을 사용하여 로그를 파일과 콘솔에 동시에 출력하는 방법은 다음과 같습니다:

 

먼저, logging 모듈을 임포트합니다

import logging

 

로깅을 설정합니다. 이는 로그 파일의 경로, 로그 레벨, 출력 형식 등을 지정하는 것입니다. 예를 들어, 다음과 같이 설정할 수 있습니다

# 기본 로거 생성
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 파일 핸들러 추가 (파일로 로그를 기록)
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)

# 콘솔 핸들러 추가 (콘솔에 로그를 출력)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 로그 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

# 핸들러 추가
logger.addHandler(file_handler)
logger.addHandler(console_handler)

 

이제 로그 메시지를 출력할 수 있습니다. 예를 들어

logger.debug('이것은 디버그 메시지입니다.')
logger.info('이것은 정보 메시지입니다.')
logger.warning('이것은 경고 메시지입니다.')
logger.error('이것은 에러 메시지입니다.')
logger.critical('이것은 심각한 에러 메시지입니다.')

 

 

위 코드에서는 기본 로거를 생성하고, 파일 핸들러와 콘솔 핸들러를 추가하여 로그를 파일과 콘솔에 동시에 출력합니다. 로그 포맷과 로그 레벨은 각 핸들러에서 설정됩니다.

이렇게 하면 로그가 파일과 콘솔에 동시에 출력되어 프로그램의 디버깅 및 모니터링에 도움이 됩니다.

3. 로깅을 설정하는 별도의 모듈을 만들고 전체 프로젝트에서 사용하는 방법

모든 파이썬 파일에 로깅 파일 핸들러와 콘솔 핸들러를 적용하는 가장 효과적인 방법은 로깅을 설정하는 별도의 모듈을 만들고, 이를 모든 파이썬 파일에서 임포트하여 사용하는 것입니다. 이를 위해서는 다음과 같은 단계를 따릅니다:

 

로깅 설정을 포함하는 logger.py와 같은 파일을 생성합니다

import logging

# 기본 로거 생성
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# 파일 핸들러 추가 (파일로 로그를 기록)
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)

# 콘솔 핸들러 추가 (콘솔에 로그를 출력)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 로그 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

# 핸들러 추가
logger.addHandler(file_handler)
logger.addHandler(console_handler)

 

이제 logger.py를 프로젝트의 다른 모든 파이썬 파일에서 임포트하여 사용합니다. 예를 들어, 다른 파이썬 파일에서 로깅을 사용할 때 다음과 같이 logger.py를 임포트합니다

from logger import logger

# 로그 메시지 출력
logger.debug('이것은 디버그 메시지입니다.')
logger.info('이것은 정보 메시지입니다.')
logger.warning('이것은 경고 메시지입니다.')
logger.error('이것은 에러 메시지입니다.')
logger.critical('이것은 심각한 에러 메시지입니다.')

 

이렇게 하면 모든 파이썬 파일에서 같은 로깅 설정을 사용할 수 있으며, 코드의 중복을 피할 수 있습니다. 또한 로깅 설정을 한 곳에서 관리하기 때문에 유지보수가 용이해집니다.

 

logger LEVEL을 외부에서 바꾸기

 

로그 레벨을 외부에서 변경할 수 있도록 하려면 로깅 설정을 변경할 수 있는 함수를 만들어야 합니다. 이 함수를 호출하여 로그 레벨을 변경할 수 있습니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

 

logger.py

import logging

# 기본 로거 생성
logger = logging.getLogger()

# 파일 핸들러 추가 (파일로 로그를 기록)
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)

# 콘솔 핸들러 추가 (콘솔에 로그를 출력)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)

# 로그 포맷 설정
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
file_handler.setFormatter(formatter)
console_handler.setFormatter(formatter)

# 핸들러 추가
logger.addHandler(file_handler)
logger.addHandler(console_handler)

def set_log_level(level):
    logger.setLevel(level)
    file_handler.setLevel(level)
    console_handler.setLevel(level)

 

이제 set_log_level() 함수를 사용하여 로그 레벨을 변경할 수 있습니다. 예를 들어, 다음과 같이 호출할 수 있습니다.

import logging
from logger import set_log_level, logger

# 로그 레벨을 변경합니다.
set_log_level(logging.INFO)

# 로그 메시지 출력
logger.debug('디버그 메시지는 출력되지 않습니다.')
logger.info('이것은 정보 메시지입니다.')

 

위 코드에서는 로그 레벨을 INFO로 설정하고 있으므로 DEBUG 레벨의 로그는 출력되지 않습니다. set_log_level 함수를 호출하여 로그 레벨을 변경하면 로그 레벨이 변경됩니다.

 

'python > logging' 카테고리의 다른 글

Custom Logger 만들기 2 (일자별로 log 파일 생성)  (0) 2024.03.29
Custom Logger 만들기 1  (0) 2024.03.29

+ Recent posts