본문 바로가기

개발/Python & Flask

Python Flask Logging 사용법!! - 서버관리 필수요소

CSV로 로그파일을 생성할 줄 알았는데,

파이썬 기본 내장 모듈인 logging 을 사용하고,

구체적인 format 또한 정해져있었다.

 

로그는 왜남길까?

서버가 24시간 잘 돌아가는지 확인을 해야하는데,

사람이 죽치고 앉아서 쳐다볼 수 없지 않는가!?

 

그래서 로깅을 통해 잘 돌아가는지 언제든지 확인하기 위한 것이다!


 

로거 관련 지식 :


1. 로거 생성
mylogger = logging.getLogger("이름") 형태로 생성할 수 있다.
만약 ("이름") 파라미터가 없다면 루트로거를 부른다.
루트로거의 기본레벨은 warning 레벨이다.
레벨은 Warning, error, debug, info 가 있다.

 

2. 레벨 설정
로거를 생성하면 레벨을 설정해야한다.
mylogger.setLevel(logging.INFO) 형태로 설정한다.

 

 

3. 핸들러 설정

streamHandler = logging StreamHandler()
mylogger addHandler(streamHandler)

"핸들러" 개념은 내가 로깅한 정보가 출력되는 위치를 말한다.

이렇게 설정하면 콘솔을 통해 출력하지만, (콘솔 = CMD창, SHELL창, stream)
파일, DB, 소켓, 큐 등을 통해 출력하도록 설정도 가능하다.

 

 

4. 파일 핸들러 설정
fileHandler = logging. FileHandler('my.log')
mylogger.addHandler(fileHandler) )

fileHandler = logging. FileHandler('my.log')
mylogger.addHandler(fileHandler) )

 

위에 설명했듯, 파일 핸들러는?

출력위치를 파일로 설정하는 것이다.

이렇게 설정하면 my log 파일에 로그가 기록된다.
기본적으로 'a' (append) 방식으로 열리게 되어있다.
파일이 없다면 새로 생성해주기도 하니 얼마나 똑순이인가!

 


5. 출력포맷 설정

formatter = logging. Formatter('% (asctime)s - %(name)s - %(levelname)s - %(message)s')
streamHandler.setFormatter(formatter)

여기서 담기는 정보들은
asctime 입력시간
name 로거 이름
levelname 로레벨
message 메시지

이다.

별도로 지정하거나 설정해준 적 없이, 저렇게 영단어만 입력하면 알아서 뽑아준다.

으이구 똑순이 같으니라구!


6. 로거 특성
로거는 부모자식 관계가 있다.
루트로거를 생성하고,
myLogger 를 생성하고
myLogger.info("1234") 를 출력하면
1234
1234
로 출력된다.
그 이유는 즉 myLogger 가 루트로거의 자식으로 등록되어 있기 때문이다.
이렇게 상위로 전파되는 것을 막으려면 my Logger.propagate = 0 로 세팅하는 방법이 있다.
혹은 루트로거에서 핸들러를 추가하지 않으면 된다.

 

7. 파일 포맷
은 JSON, INI, YAML 등으로 설정할 수 있다.
{
    "version": 1,
    "formatters": {
         "simple": {
              "format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
         }
     },
     "handlers": {
           "Console":{
                "class": "logging StreamHandler"

....

 

format 설정도 따로 해줄 수 있고,

핸들러도 따로 해줄수 있고,

이런 설정 정보가 일괄적으로 담긴 파일을 Json, ini, yaml 등의 느낌으로 저장할 수 있다.

반응형