Python - 로그 출력 (logging API)

logging API로 로그 출력 방법을 소개합니다.

1. logging API로 로그 출력

파이썬의 logging api는 다음과 같은 로그 레벨을 지원합니다.

  • DEBUG (Lowest)
  • INFO
  • WARNING
  • ERROR
  • CRITICAL (Highest)

그리고 아래와 같이 로그 레벨별로 로그 출력 API를 제공합니다.

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')

위 코드를 실행하면 다음과 같이 Warning 이상의 로그 레벨만 출력됩니다. 그 이유는 기본 설정이 그렇게 설정되었기 때문입니다.

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message

2. 출력되는 로그 레벨 변경

로그 레벨 설정을 변경하면 Warning 이하의 로그들도 출력할 수 있습니다.

다음은 로그 레벨을 DEBUG로 변경하여 로그를 출력하는 예제입니다.

import logging

logging.basicConfig(level=logging.DEBUG)

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')

Output:

DEBUG:root:This is a debug message
INFO:root:This is an info message
WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message

3. 로그 형식 변경

다음과 같이 로그 format을 변경하여 로그를 출력할 수 있습니다.

import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')

Output:

11583-WARNING-This is a Warning

로그 시간 출력 (1)

로그에 시간을 함께 출력하고 싶다면 다음과 같이 구현할 수 있습니다.

import logging

logging.basicConfig(format='%(asctime)s - %(message)s', level=logging.INFO)
logging.info('Admin logged in')

Output:

2021-07-03 16:46:58,544 - Admin logged in

로그 시간 출력 (2)

import logging

logging.basicConfig(format='%(asctime)s - %(message)s', datefmt='%d-%b-%y %H:%M:%S')
logging.warning('Admin logged out')

Output:

03-Jul-21 16:48:13 - Admin logged out

4. 로그의 문자열 format

문자열에 대한 format 예제입니다.

import logging

name = 'John'

logging.error('%s raised an error', name)

Output:

ERROR:root:John raised an error

다음과 같이 f-string을 사용해도 됩니다.

import logging

name = 'John'

logging.error(f'{name} raised an error')

Output:

ERROR:root:John raised an error

5. Exception 발생 시, stack 출력

에러 로그에 exc_info=True로 인자를 전달하면, 다음과 같이 Exception에 대한 stack을 로그로 출력할 수 있습니다.

import logging

a = 5
b = 0

try:
    c = a / b
except Exception as e:
    logging.error("Exception occurred", exc_info=True)

Output:

ERROR:root:Exception occurred
Traceback (most recent call last):
  File "/home/js/IdeaProjects/python-ex/test.py", line 63, in <module>
    c = a / b
ZeroDivisionError: division by zero

exc_info=False를 전달하거나 인자를 전달하지 않으면 stack이 출력되지 않습니다.

References

Loading script...

Related Posts

codechachaCopyright ©2019 codechacha