Programing

Python 로깅을 위한 시간 형식을 사용자 지정하는 방법?

c10106 2022. 3. 15. 20:40
반응형

Python 로깅을 위한 시간 형식을 사용자 지정하는 방법?

나는 Python의 로그 패키지가 처음이라 내 프로젝트에 사용할 계획이다.나는 내 취향에 맞게 시간 형식을 맞춤화하고 싶다.튜토리얼에서 복사한 짧은 코드는 다음과 같다.

import logging

# create logger
logger = logging.getLogger("logging_tryout2")
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s")

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

# "application" code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")

여기 출력이 있다.

2010-07-10 10:46:28,811;DEBUG;debug message
2010-07-10 10:46:28,812;INFO;info message
2010-07-10 10:46:28,812;WARNING;warn message
2010-07-10 10:46:28,812;ERROR;error message
2010-07-10 10:46:28,813;CRITICAL;critical message

'시간 형식을 다음과 같이 줄이고 싶다.'2010-07-10 10:46:28', 밀리초 접미사를 떨어뜨린다.나는 포맷터를 보았다.형식 지정 시간, 그러나 혼동.나는 네가 나의 목표를 달성하도록 도와준 것에 감사한다.감사합니다.

Formatter 클래스에 대한 공식 문서:

생성자는 메시지 형식 문자열과 날짜 형식 문자열의 두 가지 선택적 인수를 사용한다.

그러니 변화하라

# create formatter
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s")

# create formatter
formatter = logging.Formatter("%(asctime)s;%(levelname)s;%(message)s",
                              "%Y-%m-%d %H:%M:%S")

사용.logging.basicConfig, 다음 예제가 나에게 효과가 있다.

logging.basicConfig(
    filename='HISTORYlistener.log',
    level=logging.DEBUG,
    format='%(asctime)s.%(msecs)03d %(levelname)s %(module)s - %(funcName)s: %(message)s',
    datefmt='%Y-%m-%d %H:%M:%S',
)

이렇게 하면 한 줄로 모두 포맷하고 구성할 수 있다.결과 로그 레코드는 다음과 같다.

2014-05-26 12:22:52.376 CRITICAL historylistener - main: History log failed to start

다른 답변에 추가하기 위해 Python Documentation의 변수 목록은 다음과 같이 하십시오.

Directive   Meaning Notes

%a  Locale’s abbreviated weekday name.   
%A  Locale’s full weekday name.  
%b  Locale’s abbreviated month name.     
%B  Locale’s full month name.    
%c  Locale’s appropriate date and time representation.   
%d  Day of the month as a decimal number [01,31].    
%H  Hour (24-hour clock) as a decimal number [00,23].    
%I  Hour (12-hour clock) as a decimal number [01,12].    
%j  Day of the year as a decimal number [001,366].   
%m  Month as a decimal number [01,12].   
%M  Minute as a decimal number [00,59].  
%p  Locale’s equivalent of either AM or PM. (1)
%S  Second as a decimal number [00,61]. (2)
%U  Week number of the year (Sunday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Sunday are considered to be in week 0.    (3)
%w  Weekday as a decimal number [0(Sunday),6].   
%W  Week number of the year (Monday as the first day of the week) as a decimal number [00,53]. All days in a new year preceding the first Monday are considered to be in week 0.    (3)
%x  Locale’s appropriate date representation.    
%X  Locale’s appropriate time representation.    
%y  Year without century as a decimal number [00,99].    
%Y  Year with century as a decimal number.   
%z  Time zone offset indicating a positive or negative time difference from UTC/GMT of the form +HHMM or -HHMM, where H represents decimal hour digits and M represents decimal minute digits [-23:59, +23:59].  
%Z  Time zone name (no characters if no time zone exists).   
%%  A literal '%' character.     

logging.config를 사용하는 경우.fileConfig에서 구성 파일 사용 방법:

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=%Y-%m-%d %H:%M:%S

다음 형식 사용:

형식 1:

'formatters': {
        'standard': {
            'format' : '%(asctime)s |:| LEVEL: %(levelname)s |:| FILE PATH: %(pathname)s |:| FUNCTION/METHOD: %(funcName)s %(message)s |:| LINE NO.: %(lineno)d |:| PROCESS ID: %(process)d |:| THREAD ID: %(thread)d',
            'datefmt' : "%y/%b/%Y %H:%M:%S"
                    },
              }

형식 1의 출력:

여기에 이미지 설명을 입력하십시오.



형식 2:

'formatters': {
        'standard': {
            'format' : '%(asctime)s |:| LEVEL: %(levelname)s |:| FILE PATH: %(pathname)s |:| FUNCTION/METHOD: %(funcName)s %(message)s |:| LINE NO.: %(lineno)d |:| PROCESS ID: %(process)d |:| THREAD ID: %(thread)d',
            'datefmt' : "%Y-%m-%d %H:%M:%S"
                    },
              }

형식 2의 출력:

여기에 이미지 설명을 입력하십시오.

로깅하는 동안 시간 형식을 사용자 지정하기 위해 로거 개체와 그에 대한 fileHandler를 생성할 수 있다.

        import logging
        from datetime import datetime

        logger = logging.getLogger("OSA")

        logger.setLevel(logging.DEBUG)

        filename = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + ".log"
        fileHandler = logging.FileHandler(filename, mode="a")#'a' for append you can use 'w' for write

        formatter = logging.Formatter(
            "%(asctime)s : %(levelname)s : [%(filename)s:%(lineno)s - %(funcName)s()] : %(message)s",
            "%Y-%m-%d %H:%M:%S")

        fileHandler.setFormatter(formatter)
        logger.addHandler(fileHandler)
        

참조URL: https://stackoverflow.com/questions/3220284/how-to-customize-the-time-format-for-python-logging

반응형