Hoe de tijdnotatie voor Python-logboekregistratie aanpassen?

Ik ben nieuw in het logpakket van Python en ben van plan het voor mijn project te gebruiken. Ik zou het tijdformaat naar mijn smaak willen aanpassen. Hier is een korte code die ik uit een zelfstudie heb gekopieerd:

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")

En hier is de uitvoer:

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

Ik zou de tijdnotatie willen inkorten tot gewoon: ‘2010-07-10 10:46:28‘, waarbij het achtervoegsel van de milliseconde wegvalt. Ik keek naar de Formatter.formatTime, maar was in de war. Ik waardeer je hulp om mijn doel te bereiken. Dank je.


Antwoord 1, autoriteit 100%

Uit de officiële documentatieover de Formatter-klasse:

De constructor heeft twee optionele argumenten: een tekenreeks voor berichtindeling en een tekenreeks voor datumnotatie.

Dus veranderen

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

naar

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

Antwoord 2, autoriteit 77%

Met logging.basicConfigwerkt het volgende voorbeeld voor mij:

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',
)

Hiermee kunt u & config alles in één regel. Een resulterend logbestand ziet er als volgt uit:

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

Antwoord 3, autoriteit 17%

Als aanvulling op de andere antwoorden, vindt u hier de variabelenlijstuit Python-documentatie.

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.     

Antwoord 4, autoriteit 13%

als je logging.config.fileConfig gebruikt met een configuratiebestand, gebruik dan zoiets als:

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

Antwoord 5

Probeer deze formaten:

Formaat 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"
                    },
              }

Uitvoer van formaat 1:

voer hier de afbeeldingsbeschrijving in

Formaat 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"
                    },
              }

Uitvoer van formaat 2:

voer hier de afbeeldingsbeschrijving in

Other episodes