유의하시기 바랍니다 크레이그 맥다니엘의 솔루션은 분명히 낫다.
logging.Formatter의 formatTime
메소드는 다음과 같습니다.
def formatTime(self, record, datefmt=None):
ct = self.converter(record.created)
if datefmt:
s = time.strftime(datefmt, ct)
else:
t = time.strftime("%Y-%m-%d %H:%M:%S", ct)
s = "%s,%03d" % (t, record.msecs)
return s
의 쉼표를 확인하십시오 "%s,%03d"
. datefmt
이유 ct
는 a 를 지정하여 해결할 수 없으며 time.struct_time
이러한 개체는 밀리 초를 기록하지 않습니다.
정의를 변경하여 객체 대신 객체 ct
를 만들려면 (적어도 최신 버전의 Python에서는) 호출 할 수 있으며 마이크로 초 형식을 지정할 수 있습니다 .datetime
struct_time
ct.strftime
%f
import logging
import datetime as dt
class MyFormatter(logging.Formatter):
converter=dt.datetime.fromtimestamp
def formatTime(self, record, datefmt=None):
ct = self.converter(record.created)
if datefmt:
s = ct.strftime(datefmt)
else:
t = ct.strftime("%Y-%m-%d %H:%M:%S")
s = "%s,%03d" % (t, record.msecs)
return s
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
console = logging.StreamHandler()
logger.addHandler(console)
formatter = MyFormatter(fmt='%(asctime)s %(message)s',datefmt='%Y-%m-%d,%H:%M:%S.%f')
console.setFormatter(formatter)
logger.debug('Jackdaws love my big sphinx of quartz.')
# 2011-06-09,07:12:36.553554 Jackdaws love my big sphinx of quartz.
또는 밀리 초를 얻으려면 쉼표를 소수점으로 변경하고 datefmt
인수를 생략하십시오 .
class MyFormatter(logging.Formatter):
converter=dt.datetime.fromtimestamp
def formatTime(self, record, datefmt=None):
ct = self.converter(record.created)
if datefmt:
s = ct.strftime(datefmt)
else:
t = ct.strftime("%Y-%m-%d %H:%M:%S")
s = "%s.%03d" % (t, record.msecs)
return s
...
formatter = MyFormatter(fmt='%(asctime)s %(message)s')
...
logger.debug('Jackdaws love my big sphinx of quartz.')
# 2011-06-09 08:14:38.343 Jackdaws love my big sphinx of quartz.