[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.)