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