দয়া করে নোট করুন ক্রেগ ম্যাকডানিয়েলের সমাধানটি আরও ভাল।
লগিং.ফর্ম্যাটটারের 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
এটি একটি time.struct_time
এবং এই বস্তুগুলি মিলি সেকেন্ড রেকর্ড করে না।
যদি আমরা ct
এটির 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.