CDW (Coding Discussion World)
python 기초 - logging 본문
이번편은 파이썬의 logging 기능에 대해서 알아보고자 한다.
해당 기능을 사용하면 특정 error log를 출력할수도 있고 별도의 파일에 저장할수도 있다.
또한 try, except 문을 통해 특정 상황에 원하는 log를 출력할수도 있다.
우선 아래와 같이 설정해놓고 한줄한줄 확인해보자.
### 로깅 이름 및 레벨 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
pyminlogger = logging.getLogger("pymin")
pyminlogger.setLevel(logging.WARNING)
### 로깅 출력 형식
formatter = logging.Formatter('%(asctime)s - %(name)s [ %(levelname)s ] - %(threadName)s - LINE:%(lineno)d : %(message)s')
### Handler 설정 (파일, DB, 소켓, 큐 등 설정 가능)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
pyminlogger.addHandler(stream_handler)
### 파일로 저장
log_file = os.getcwd() + "/log/pymin_log.txt"
file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(formatter)
pyminlogger.addHandler(file_handler)
### 테스트 로그 발생
pyminlogger.error("error test")
pyminlogger.info("info test")
2022-06-12 00:42:12,411 - pymin [ ERROR ] - MainThread - LINE:28 : error test
우선 로그 레벨 설정이다.
DEBUG < INFO < WARNING < ERROR < CRITICAL 순서에서 더 높은 레벨인 ERROR 는 출력이 되지만, 하위레벨 (INFO,DEBUG) 은 출력이 안되도록 설정할 수 있고, 상황에 맞게 사용하면 된다.
*설정에 따라 다르겠지만 평소에는 ERROR로 해두다가 디버깅이 필요할 때만 DEBUG로 설정하는 등 상황에 맞게 바꿔가면서 사용하면 된다.
### 로깅 이름 및 레벨 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
pyminlogger = logging.getLogger("pymin")
pyminlogger.setLevel(logging.WARNING)
다음으로 로깅을 어떤 형태로 출력할지를 나타낸다.
정답은 없고 본인이 원하는 형태를 만들면 되는데, 아래처럼 할 경우 시간, 로그레벨, Thread, error Line 등 상세 내용을 확인할 수 있다.
### 로깅 출력 형식
formatter = logging.Formatter('%(asctime)s - %(name)s [ %(levelname)s ] - %(threadName)s - LINE:%(lineno)d : %(message)s')
다음으로는 handler 설정이데 간단히 말해서 어떤 출력 형식을 사용할 것인지를 나타낸다. 여러개의 출력 형식을 등록할 수도 있다.
### Handler 설정 (파일, DB, 소켓, 큐 등 설정 가능)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
pyminlogger.addHandler(stream_handler)
다음은 로그를 출력만 하는 것이 아니라 특정 파일로 저장하는 기능이다.
### 파일로 저장
log_file = os.getcwd() + "/log/pymin_log.txt"
file_handler = logging.FileHandler(log_file)
file_handler.setFormatter(formatter)
pyminlogger.addHandler(file_handler)
마지막으로 로깅이 정상적으로 되는지 확인하기 위해 테스트 로그를 발생시켰다.
아래는 2개의 테스트를 발생시켰지만 1개만 출력되었다. 왜그럴까? 처음에 로그 레벨 세팅을 WARNING으로 해두어서 그런다.
로그 레벨 세팅을 INFO로 변경할 경우 모든 테스트 로그가 출력된다.
### 테스트 로그 발생
pyminlogger.error("error test")
pyminlogger.info("info test")
2022-06-12 01:04:52,889 - pymin [ ERROR ] - MainThread - LINE:27 : error test
이상으로 logging 관련 설명을 마친다.
'Python > Study' 카테고리의 다른 글
python 기초 - venv 사용하기 (0) | 2022.11.29 |
---|---|
python 기초 - open (파일 읽고, 쓰기) (0) | 2022.11.29 |
python 기초 - datetime (0) | 2022.11.29 |
python(old) - venv 사용하기 (0) | 2022.10.27 |
python(old) - open (파일 읽고, 쓰기) (0) | 2022.06.12 |