python - সহজ ভাষায় পাইথন ৩ pdf download




পাইথন লগিং: সময় বিন্যাসে মিলিসেকেন্ড ব্যবহার করুন (5)

Msecs যোগ করা ভাল বিকল্প, ধন্যবাদ। ব্লেন্ডারে Python 3.5.3 এর সাথে এটি ব্যবহার করে আমার সংশোধনী এখানে

import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s.%(msecs)03d %(levelname)s:\t%(message)s', datefmt='%Y-%m-%d %H:%M:%S')
log = logging.getLogger(__name__)
log.info("Logging Info")
log.debug("Logging Debug")

ডিফল্ট logging.Formatter('%(asctime)s') দ্বারা। logging.Formatter('%(asctime)s') নিচের ফর্ম্যাটের সাথে প্রিন্ট করে:

2011-06-09 10:54:40,638

যেখানে 638 মিলিসেকেন্ড হয়। আমি কমাতে একটি বিন্দু পরিবর্তন করতে হবে:

2011-06-09 10:54:40.638

সময়টি ফরম্যাট করতে আমি ব্যবহার করতে পারি:

logging.Formatter(fmt='%(asctime)s',datestr=date_format_str)

তবে documentation মিলিসেকেন্ডগুলি কিভাবে বিন্যাস করতে পারে তা নির্দিষ্ট করে না। আমি এই SO প্রশ্নটি খুঁজে পেয়েছি যা মাইক্রোসেকেন্ড সম্পর্কে আলোচনা করে, কিন্তু একটি) আমি মিলিসেকেন্ড পছন্দ করব এবং b) নিম্নলিখিত %f কারণে Python 2.6 (যা আমি কাজ করছি) -এ কাজ করে না:

logging.Formatter(fmt='%(asctime)s',datefmt='%Y-%m-%d,%H:%M:%S.%f')

এই খুব কাজ করা উচিত:

logging.Formatter(fmt='%(asctime)s.%(msecs)03d',datefmt='%Y-%m-%d,%H:%M:%S')

ডিফল্ট_msec_format ওভাররাইড করার সবচেয়ে সহজ উপায় হল:

formatter = logging.Formatter('%(asctime)s')
formatter.default_msec_format = '%s.%03d'

যদি আপনি arrow ব্যবহার করেন বা আপনি তীর ব্যবহার করে মনে করেন না। আপনি তীরের জন্য পাইথনের সময় বিন্যাসকরণ প্রতিস্থাপন করতে পারেন।

import logging

from arrow.arrow import Arrow


class ArrowTimeFormatter(logging.Formatter):

    def formatTime(self, record, datefmt=None):
        arrow_time = Arrow.fromtimestamp(record.created)

        if datefmt:
            arrow_time = arrow_time.format(datefmt)

        return str(arrow_time)


logger = logging.getLogger(__name__)

default_handler = logging.StreamHandler()
default_handler.setFormatter(ArrowTimeFormatter(
    fmt='%(asctime)s',
    datefmt='YYYY-MM-DD HH:mm:ss.SSS'
))

logger.setLevel(logging.DEBUG)
logger.addHandler(default_handler)

এখন আপনি datefmt বৈশিষ্ট্যতে তীরের সময় ফর্ম্যাটিং ব্যবহার করতে পারেন।


ক্রেগ ম্যাকডনিয়েল এর সমাধান পরিষ্কারভাবে ভাল দয়া করে নোট করুন।

লগিং। formatTime বিন্যাস 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 পরিবর্তে struct_time পরিবর্তে datetime অবজেক্টটি পরিবর্তন করার জন্য যদি struct_time সংজ্ঞা পরিবর্তন করি তবে (অন্তত পাইথনের আধুনিক সংস্করণের সাথে) আমরা ct.strftime কল করতে 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.




time