장고에서 로그 찍는 방법에 대한 설명을 적어봅니다.



장고는 python의 Logging 모듈을 그대로 사용합니다.


Logging 모듈 문서는 아래의 링크에서 확인하실 수 있어요.


https://docs.python.org/3.6/library/logging.html?highlight=logging#module-logging




파이썬 Logging 모듈은 총 4가지로 구성됩니다.


Logger, Handler, Formatter, Filter


자세한 설명은 python 다큐멘테이션과 아래의 장고 다큐멘테이션에서 확인 할 수 있습니다!


https://docs.djangoproject.com/en/2.1/topics/logging/



저는 간단히 복붙할 수 있는 코드만 나열하고 어떤 의미인지만 설명할게요.



우선 날짜별, 시간별로 로그파일을 저장할때는 handler 모듈 중에서 TimedRotatingFileHandler를 이용합니다.



아래와 같이 장고 프로젝트 디렉토리 안의 settings.py에 아래와 같은 코드를 입력하면 지정한 경로에 차근차근 로그 파일이 저장되게 됩니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# projectDir/settings.py
 
# 우선 저장될 로그의 기본 이름과 위치를 지정합니다.
LOG_FILE = 'custom/path/to/save/log/myLog.log'
 
 
# 만약 settings.py가 위치한 디렉토리 기준으로 로그를 저장하고 싶다면 아래와 같이 코드를 입력하면 됩니다.
# import os
# LOG_FILE = os.path.join(os.path.dirname(__file__), '../log', 'myLog.log')
# 저는 settings.py 가 위치한 디렉토리의 상위에 log 라는 폴더를 만들어서 그곳에 파일을 저장했으며, 위의 코드는 그것을 의미합니다.
# 만약 자신만의 위치에 지정하고 싶다면 아래와 같은 코드를 입력하면 됩니다.
 
 
LOGGING = { 
    'version'1
    'disable_existing_loggers': False, 
    'formatters': {
        'myFormatt': {
            'format''[{levelname}] [{asctime}] [{process:d}] [{thread:d}]: {message}',
        },
    },
    'handlers': { 
        'file': { 
            'level''DEBUG'
            'class''logging.handlers.TimedRotatingFileHandler'
            'filename': LOG_FILE, # 위에 선언한 파일 이름
            'when'"midnight"# 매 자정마다
            'formatter''myFormatt'
            'backupCount':5
            }, 
        }, 
        'loggers': {
            'myLog': { 
                'handlers': ['file'], 
                'level''DEBUG'
            }, 
        }
    }
 
cs



현재 날짜에 해당하는 로그는 위에서 지정한 기본 파일 이름으로 저장되며, 하루가 지난 로그 들은 찍힌 날짜가 파일명 뒤에 붙어서 아래와 같은 형태로 저장되게 됩니다.



1
2
3
4
5
6
log/
├── myLog.log
├── myLog.log.2018-11-11
├── myLog.log.2018-11-12
├── myLog.log.2018-11-13
└── myLog.log.2018-11-14
cs



이 외에도 분단위로 시간단위로 특정 기간 단위로 저장할 수 있습니다. 또한, 필터를 이용해 원하는 내용만 필터링 한다거나, 원하는 포멧을 만들어서 특정 데이터를 얻는 등의 다양한 로그를 찍을 수 있습니다.

이에 해당하는 내용은 위에 언급한 다큐멘테이션 링크에서 확인할 수 있습니다~!

+ Recent posts