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 등의 느낌으로 저장할 수 있다.
'개발 > Python & Flask' 카테고리의 다른 글
pymysql 사용법 및 초간단 예시! (0) | 2020.11.10 |
---|---|
Flask app.run() 파라미터 연구와 UnicodeDecodeError... (2) | 2020.11.10 |
Python Flask CSV 파일 다루기! 초간단 3줄 예시 (0) | 2020.11.10 |
Python Sched 라이브러리 (몇초마다 반복실행) (0) | 2020.11.10 |
Flask 선행 라이브러리, Python Flask 오프라인 세팅 (0) | 2020.11.10 |