[Python] loggre 로그 출력을 JSON 형식으로 설정
개시하다
다음은 여러 로그 출력의Handler를 설정하는 방법을 요약한다.
내가 하고 싶은 일은 출력 컨트롤러의 출력 파일을 동시에 기록하는 것이다!!
날과 씨
실제 운용할 때 여러 개의 로그 출력 모드를 설정해야 한다.
이상 검출을 통해 조사할 때 의도적인 실행 처리가 이뤄졌는지 등을 감시한다.
SysLogHandler
,SocketHandler
,TimedRotatingFileHandler
등이 있다.절차.
공식 문서를 참고하여
StreamHandler
,FileHandler
의handler를 조정합니다.코드에 직접 기술하는 방법도 있는데 이번에는 설정 파일로 만들었다.
호출자의 파일 이름만 바꾸면 임의의 설정 파일을 사용할 수 있다는 장점이 있다.
디테일
형식 설정 파일(conf.json)
{
"version": 1,
"formatters": { ... 1
"detailed": {
"class": "logging.Formatter",
"format": "%(asctime)s %(name)-15s %(levelname)-13s %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S"
}
},
"handlers": {
"console": { ... 2
"class": "logging.StreamHandler",
"level": "INFO",
"formatter": "detailed"
},
"file": {
"class": "logging.FileHandler",
"filename": "log/mplog.log",
"mode": "a",
"formatter": "detailed"
},
"testfile": {
"class": "logging.FileHandler",
"filename": "log/testfile.log",
"level": "ERROR",
"mode": "a",
"formatter": "detailed"
},
"errors": { ... 3
"class": "logging.FileHandler",
"filename": "log/mplog-errors.log",
"mode": "a",
"level": "ERROR",
"formatter": "detailed"
}
},
"loggers": { ... 4
"testfile": {
"handlers": ["testfile"]
}
},
"root": { ... 5
"level": "DEBUG",
"handlers": ["console", "file", "errors"]
}
}
1. formatters: 출력 형식 설정
detailed: 마음에 드는 이름을 지어서formatter의 이름을 붙일 수 있습니다
class:Formater 인스턴스 지정
format: 로그 출력 형식 모드
데이터 fmt 조정:
%(asctime)s
의 표시 "formatters": {
"detailed": {
"class": "logging.Formatter",
"format": "%(asctime)s %(name)-15s %(levelname)-13s %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S"
}
2.handlers: 출력 항목 설정(Stream Handler)
좋아하는 handler 이름
level: 출력 레벨 설정
formatter:formatters에서 지정할 형식 이름
"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "INFO",
"formatter": "detailed"
},
3. handlers: 출력 항목 설정(FileHandler)
erross:좋아하는handler명
filename:<디렉토리 경로>/<파일 출력 이름>
mode: 쓰기 모드 w: 새 쓰기, a: 추기 등
"errors": {
"class": "logging.FileHandler",
"filename": "log/mplog-errors.log",
"mode": "a",
"level": "ERROR",
"formatter": "detailed"
}
4.loggers:logger 이름 지정
logger 이름을 지정하면 출력이 표시됩니다.다음 설정은
testfile
의handler를 선택합니다.마음에 드는 이름을 짓다
handlers:handlers 이름의 이름 설정을 지정합니다
"loggers": {
"testfile": {
"handlers": ["testfile"]
}
호출자의 logging을 지정하여 사용할 수 있음"testfile"
👇이런 느낌.import logging
logger = logging.getLogger("testfile")
5. 루트: 설정
handlers에서 로그를 출력하고자 하는 대상의 이름을 목록에 저장함으로써 로그 출력은 항상 반영됩니다
"root": {
"level": "DEBUG",
"handlers": ["console", "file", "errors"]
}
로그 생성/출력
main () 에 호출 처리라고 쓰여 있습니다.상세히 설명하지 않다.
main.py
import configparser
import os
import json
import logging
import logging.config
# 実行ファイル名を取得
_EXEC_FILE_NAME = os.path.basename(__file__)[:-3]
def read_conf_file(conf_file='conf/conf.json'):
""" 設定ファイルの読み込む """
with open(conf_file, 'r', encoding='utf-8') as f:
f_ = json.load(f)
logging.config.dictConfig(f_)
def get_logger(logger_='simpleDefault'):
""" ロガー生成 """
return logging.getLogger(logger_)
def set_conf(conf_file='conf/msg_format.ini'):
""" Read the format file you set. """
conf = configparser.ConfigParser()
conf.read(conf_file)
return conf
def get_conf(conf, sec: str, option: str, format1=None, format2=None):
""" Get the section name and key. """
conf = conf.get(section=sec, option=option)
return conf.format(format1, format2)
def main():
""" 実行ファイル """
# formater ファイル呼び出し
read_conf_file(conf_file='conf/conf.json')
# logger 名を設定
logger = get_logger(logger_=_EXEC_FILE_NAME)
# メッセージ一覧設定ファイルの読み込み
set_conf_ = set_conf(conf_file='conf/msg_format.ini')
# ------------------------
# ログ出力
# ------------------------
# Debug
msg1 = get_conf(conf=set_conf_, sec='message', option='DAP0001', format1=[1, 2, 3], format2=[1, 2, 3])
logger.debug(msg1)
# Info
msg2 = get_conf(conf=set_conf_, sec='message', option='IAP0001', format1=[1, 2, 3], format2=[1, 2, 3])
logger.info(msg2)
# Warning
msg3 = get_conf(conf=set_conf_, sec='message', option='WAP0001', format1=[1, 2, 3], format2=[1, 2, 3])
logger.warning(msg3)
# Error
msg4 = get_conf(conf=set_conf_, sec='message', option='EAP0001', format1=[1, 2, 3], format2=[1, 2, 3])
logger.error(msg4)
# Critical
msg5 = get_conf(conf=set_conf_, sec='message', option='CAP0001', format1=[1, 2, 3], format2=[1, 2, 3])
logger.critical(msg5)
if __name__ == '__main__':
main()
로그 출력.메시지 목록의 설정 파일msg_format.ini[message]
DAP0001=Debug Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]} err_id: {1[0]}
DAP0002=Debug Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]}
DAP0003=Debug Message user_id: {0[0]} tr_id: {0[1]}
IAP0001=Info Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]} err_id: {1[0]}
IAP0002=Info Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]}
IAP0003=Info Message user_id: {0[0]} tr_id: {0[1]}
WAP0001=Warning Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]} err_id: {1[0]}
WAP0002=Warning Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]}
WAP0003=Warning Message user_id: {0[0]} tr_id: {0[1]}
EAP0001=Error Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]} err_id: {1[0]}
EAP0002=Error Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]}
EAP0003=Error Message user_id: {0[0]} tr_id: {0[1]}
CAP0001=Critical Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]} err_id: {1[0]}
CAP0002=Critical Message user_id: {0[0]} tr_id: {0[1]} param_id: {0[2]}
CAP0003=Critical Message user_id: {0[0]} tr_id: {0[1]}
실행 결과
하고 싶은 거 다 한 것 같아!
콘솔 출력 INFO 레벨 이상
2021-12-11 20:12:40 format INFO Info Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
2021-12-11 20:12:40 format WARNING Warning Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
2021-12-11 20:12:40 format ERROR Error Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
2021-12-11 20:12:40 format CRITICAL Critical Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
mplog.log:DEBUG 레벨 이상의 파일 출력2021-12-11 20:12:40 format DEBUG Debug Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
2021-12-11 20:12:40 format INFO Info Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
2021-12-11 20:12:40 format WARNING Warning Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
2021-12-11 20:12:40 format ERROR Error Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
2021-12-11 20:12:40 format CRITICAL Critical Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
mplog-error.log:ERROR 이상의 파일 출력2021-12-11 20:12:40 format ERROR Error Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
2021-12-11 20:12:40 format CRITICAL Critical Message user_id: 1 tr_id: 2 param_id: 3 err_id: 1
총결산
이번에는 로그 출력 설정을 이해할 수 있을 것 같아.
그리고 다음 절차를 진행하는 것이 좋습니다!!
참고 자료
Reference
이 문제에 관하여([Python] loggre 로그 출력을 JSON 형식으로 설정), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kazusa_nakagawa/articles/5c7ca8a7b2ac75텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)