목차
테스트 목적
- logging 모듈 사용해 기존 코드 대체
- python 코드 실행중에도 파일에 실시간 로깅 → 파일에 다른 작업을 할 수 있는지 확인
- 종속성 확인 (추가로 패키지를 설치해야 하는지 확인)
1. 모듈 사용법
python 기본 모듈이기 때문에 패키지를 따로 설치할 필요는 없음
1.1 handler 생성
import logging
# logger instance 생성
logger = logging.getLogger(__name__)
# handler 생성 (file type)
fileHandler = logging.FileHandler('/home/cyaninn/test/test-logging-230805/test-output.log')
'name' 은 logger의 이름을 설정해주는 부분입니다.
아무런 이름 없이 호출하게 되면 자동으로 root logger 로 설정되며,
모든 logger의 부모와 같은 형태가 됩니다.
원하는 logger의 이름을 String 자료형으로 입력해주면 됩니다.
FileHandler 에 로그를 생성할 디렉토리+파일을 설정 해주시면
해당 파일이 없을 시, 파일이 생성되면서 로그가 출력되고
파일이 있을 시, 기존 파일에 이어서 로그가 출력됩니다.
1.2 로깅 레벨
로그 출력 시 Debug, Info, Warning 등 로그의 Level을 설정 할 수 있는데요
DEBUG 간단히 문제를 진단하고 싶을 때 필요한 자세한 정보를 기록함
INFO | 계획대로 작동하고 있음을 알리는 확인 메시지 |
WARNING | 소프트웨어가 작동은 하고 있지만,예상치 못한 일이 발생했거나 할 것으로 예측된다는 것을 알림 |
ERROR | 중대한 문제로 인해 소프트웨어가 몇몇 기능들을 수행하지 못함을 알림 |
CRITICAL | 작동이 불가능한 수준의 심각한 에러가 발생함을 알림 |
setLevel() 메소드를 이용하여, 출력 범위를 정할 수 있습니다.
logger.setLevel(level=logging.ERROR) # ERROR 레벨
logger.debug('my DEBUG log')
logger.info('my INFO log')
logger.warning('my WARNING log')
logger.error('my ERROR log')
logger.critical('my CRITICAL log')
logger.setLevel(level=logging.DEBUG) # DEBUG 레벨
logger.debug('my DEBUG log')
logger.info('my INFO log')
logger.warning('my WARNING log')
logger.error('my ERROR log')
logger.critical('my CRITICAL log')
1.3 formatter 설정
로그 출력 시 입력하는 데이터(message) 외 원하는 데이터를 미리 설정하여 출력 할 수 있습니다.
formatter 설정을 통해 출력할 로그의 폼을 아래 예시와 같이 사용이 가능합니다.
속성 format 설명
asctime | %(asctime)s | 인간이 읽을 수 있는 시간 표시 |
created | %(created)f | logRecord가 만들어진 시간 |
filename | %(filename)s | pathname의 file 이름 부분 |
funcName | %(funcName)s | logging call을 포함하는 function의 이름 |
levelname | %(levelname)s | 메시지의 Text logging level: 예) INFO |
lineno | %(lineno)d | logging call이 발생한 코드의 line 숫자 |
module | %(module)s | filename의 모듈 이름 부분 |
message | %(message)s | 메시지 |
name | %(name)s | logger의 이름 |
pathname | %(pathname)s | full pathname |
thread | %(thread)d | thread ID |
threadName | %(threadName)s | thread 이름 |
# handler 생성 (file type)
fileHandler = logging.FileHandler('/home/cyaninn/Cryptocurrency-autotrade-pyupbit/test/test-logging-230805/test-output.log')
# formatter 생성 및 적용
formatter = logging.Formatter('[%(asctime)s][%(levelname)s|%(filename)s:%(lineno)s] >> %(message)s')
fileHandler.setFormatter(formatter)
# logger instance에 handler 설정
logger.addHandler(fileHandler)
2. 함수 작성
import logging
import time
# logger instance 생성
logger = logging.getLogger(__name__)
# handler 생성 (file type)
fileHandler = logging.FileHandler('/home/cyaninn/Cryptocurrency-autotrade-pyupbit/test/test-logging-230805/test-output.log')
formatter = logging.Formatter('[%(asctime)s][%(levelname)s|%(filename)s:%(lineno)s] >> %(message)s')
fileHandler.setFormatter(formatter)
# logger instance에 handler 설정
logger.addHandler(fileHandler)
# set log level
logger.setLevel(level=logging.DEBUG)
while True :
logger.debug('running')
time.sleep(1)
3. 테스트 결과
# python 코드 실행중
$ cp test-output.log test-output.log.bak
$ ls
test-logging.py test-output.log test-output.log.bak
$ tail test-output.log
[2023-08-05 16:26:36,954][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:26:37,955][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:26:38,957][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:26:39,958][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:26:40,959][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:26:41,961][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:26:42,961][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:26:43,963][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:26:44,965][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:26:45,965][DEBUG|test-logging.py:21] >> running
$ head test-output.log
[2023-08-05 16:18:15,590][DEBUG|test-logging.py:17] >> my DEBUG log
[2023-08-05 16:18:15,590][INFO|test-logging.py:18] >> my INFO log
[2023-08-05 16:18:15,590][WARNING|test-logging.py:19] >> my WARNING log
[2023-08-05 16:18:15,590][ERROR|test-logging.py:20] >> my ERROR log
[2023-08-05 16:18:15,590][CRITICAL|test-logging.py:21] >> my CRITICAL log
[2023-08-05 16:24:02,474][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:24:03,476][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:24:04,477][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:24:05,479][DEBUG|test-logging.py:21] >> running
[2023-08-05 16:24:06,481][DEBUG|test-logging.py:21] >> running
참고
'파이썬' 카테고리의 다른 글
send message to slack channel with python (0) | 2023.08.05 |
---|---|
txt 빈줄 제거 python (0) | 2023.01.15 |
개발환경 세팅 - IDE(통합개발환경) (0) | 2022.02.17 |
[GS에듀랩-COS Pro Python 2급 노트정리] unit. 4 리스트 (0) | 2021.08.14 |
[GS에듀랩-COS Pro Python 2급 노트정리] unit. 3 연산자 (0) | 2021.08.10 |