Hướng dẫn format time logging python

I am new to Python's logging package and plan to use it for my project. I would like to customize the time format to my taste. Here is a short code I copied from a tutorial:

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

And here is the output:

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

I would like to shorten the time format to just: '2010-07-10 10:46:28', dropping the mili-second suffix. I looked at the Formatter.formatTime, but confused. I appreciate your help to achieve my goal. Thank you.

fedorqui

259k99 gold badges523 silver badges576 bronze badges

asked Jul 10, 2010 at 17:56

From the official documentation regarding the Formatter class:

The constructor takes two optional arguments: a message format string and a date format string.

So change

# create formatter
formatter = logging.Formatter["%[asctime]s;%[levelname]s;%[message]s"]

to

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

answered Jul 10, 2010 at 18:05

MetalsharkMetalshark

7,8847 gold badges33 silver badges49 bronze badges

5

Using logging.basicConfig, the following example works for me:

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

This allows you to format & config all in one line. A resulting log record looks as follows:

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

Eb946207

7188 silver badges26 bronze badges

answered May 26, 2014 at 16:26

BenBen

4,2083 gold badges20 silver badges31 bronze badges

4

To add to the other answers, here are the variable list from 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.     

answered May 30, 2017 at 1:40

IacchusIacchus

2,4342 gold badges27 silver badges23 bronze badges

2

if using logging.config.fileConfig with a configuration file use something like:

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

answered May 25, 2011 at 15:34

criptoncripton

4855 silver badges9 bronze badges

Try These Formats:

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

Output of Format 1:

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

Output of Format 2:

answered Mar 31, 2021 at 12:31

Amar KumarAmar Kumar

2,0532 gold badges19 silver badges32 bronze badges

0

In order to customize time format while logging we can create a logger object and and a fileHandler to it.

        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]
        

answered Feb 11 at 11:06

devpdevp

1,9712 gold badges12 silver badges23 bronze badges

Chủ Đề