উত্তর:
logging.basicConfigবরং ব্যবহারের একটি উদাহরণlogging.fileHandler()
logging.basicConfig(filename=logname,
filemode='a',
format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s',
datefmt='%H:%M:%S',
level=logging.DEBUG)
logging.info("Running Urban Planning")
self.logger = logging.getLogger('urbanGUI')
ক্রমে, পাঁচটি অংশ নিম্নলিখিতটি করে:
filename=logname)filemode='a')format=...)datefmt='%H:%M:%S')level=logging.DEBUG)।if __name__ == '__main__':
if __name__ == '__main__':কার্যকর হয় না।
" লগিং কুকবুক " থেকে নেওয়া :
# create logger with 'spam_application'
logger = logging.getLogger('spam_application')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('spam.log')
fh.setLevel(logging.DEBUG)
logger.addHandler(fh)
এবং আপনি যেতে ভাল।
পিএস এছাড়াও লগিং HOWTO পড়া নিশ্চিত করুন ।
logger.warning("message")করতে পারি না বা logger.info("message")করতেও পারি না logger.debug("message")। এটি কিছুটা বিরক্তিকর।
logger.setLevel(logging.DEBUG)। লগার একাধিক হ্যান্ডলারের সাথে কনফিগার করা যায়; লগারে কনফিগার করা স্তরটি নির্ধারণ করে যে তার প্রতিটি হ্যান্ডলারের কাছে কোন তীব্রতা স্তর লগ বার্তা প্রেরণ করা হবে এবং হ্যান্ডলারগুলিতে সেট করা স্তরগুলি হ্যান্ডলারটি কোন স্তরের প্রক্রিয়া করবে তা নির্ধারণ করে। মনে রাখবেন যে তথ্য বার্তাগুলি মুদ্রণ করতে চান তাদের কেবল INFOলগার এবং হ্যান্ডলার উভয়কেই এটি সেট করতে হবে ।
logger.setLevel(logging.DEBUG)- মন্তব্যের জন্য ধন্যবাদ
আমি একটি কনফিগারেশন ফাইল ব্যবহার করতে পছন্দ করি। বিকাশ থেকে ছেড়ে দেওয়ার সময় কোড পরিবর্তন না করে এটি আমাকে লগিংয়ের স্তর, অবস্থানগুলি ইত্যাদি স্যুইচ করতে দেয়। আমি কেবল একই নাম এবং একই সংজ্ঞায়িত লগার সহ একটি পৃথক কনফিগার ফাইল প্যাকেজ করি।
import logging.config
if __name__ == '__main__':
# Configure the logger
# loggerConfigFileName: The name and path of your configuration file
logging.config.fileConfig(path.normpath(loggerConfigFileName))
# Create the logger
# Admin_Client: The name of a logger defined in the config file
mylogger = logging.getLogger('Admin_Client')
msg='Bite Me'
myLogger.debug(msg)
myLogger.info(msg)
myLogger.warn(msg)
myLogger.error(msg)
myLogger.critical(msg)
# Shut down the logger
logging.shutdown()
লগ কনফিগার ফাইলের জন্য আমার কোড এখানে
#These are the loggers that are available from the code
#Each logger requires a handler, but can have more than one
[loggers]
keys=root,Admin_Client
#Each handler requires a single formatter
[handlers]
keys=fileHandler, consoleHandler
[formatters]
keys=logFormatter, consoleFormatter
[logger_root]
level=DEBUG
handlers=fileHandler
[logger_Admin_Client]
level=DEBUG
handlers=fileHandler, consoleHandler
qualname=Admin_Client
#propagate=0 Does not pass messages to ancestor loggers(root)
propagate=0
# Do not use a console logger when running scripts from a bat file without a console
# because it hangs!
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=consoleFormatter
args=(sys.stdout,)# The comma is correct, because the parser is looking for args
[handler_fileHandler]
class=FileHandler
level=DEBUG
formatter=logFormatter
# This causes a new file to be created for each script
# Change time.strftime("%Y%m%d%H%M%S") to time.strftime("%Y%m%d")
# And only one log per day will be created. All messages will be amended to it.
args=("D:\\Logs\\PyLogs\\" + time.strftime("%Y%m%d%H%M%S")+'.log', 'a')
[formatter_logFormatter]
#name is the name of the logger root or Admin_Client
#levelname is the log message level debug, warn, ect
#lineno is the line number from where the call to log is made
#04d is simple formatting to ensure there are four numeric places with leading zeros
#4s would work as well, but would simply pad the string with leading spaces, right justify
#-4s would work as well, but would simply pad the string with trailing spaces, left justify
#filename is the file name from where the call to log is made
#funcName is the method name from where the call to log is made
#format=%(asctime)s | %(lineno)d | %(message)s
#format=%(asctime)s | %(name)s | %(levelname)s | %(message)s
#format=%(asctime)s | %(name)s | %(module)s-%(lineno) | %(levelname)s | %(message)s
#format=%(asctime)s | %(name)s | %(module)s-%(lineno)04d | %(levelname)s | %(message)s
#format=%(asctime)s | %(name)s | %(module)s-%(lineno)4s | %(levelname)-8s | %(message)s
format=%(asctime)s | %(levelname)-8s | %(lineno)04d | %(message)s
#Use a separate formatter for the console if you want
[formatter_consoleFormatter]
format=%(asctime)s | %(levelname)-8s | %(filename)s-%(funcName)s-%(lineno)04d | %(message)s
%%পাইথন 3 এ দ্বিগুণ প্রয়োজন eg উদাহরণস্বরূপtime.strftime("%%Y%%m%%D")
http://docs.python.org/library/logging.html#logging.basicConfig
logging.basicConfig(filename='/path/to/your/log', level=....)
loggingমডিউল ডকুমেন্টেশন এটির জন্য অনুমতি দেয়। আপনি লগগুলি টার্মিনালে যায় এবং কোনটি কোনও ফাইলে যায় এবং আরও অনেক আকর্ষণীয় অ্যাপ্লিকেশন চয়ন করতে পারেন। docs.python.org/3/howto/…
এটি সম্পর্কে একটি সহজ উপায় এখানে। এই সমাধানটি কোনও কনফিগার অভিধান ব্যবহার করে না এবং ঘূর্ণন ফাইল হ্যান্ডলার ব্যবহার করে, যেমন:
import logging
from logging.handlers import RotatingFileHandler
logging.basicConfig(handlers=[RotatingFileHandler(filename=logpath+filename,
mode='w', maxBytes=512000, backupCount=4)], level=debug_level,
format='%(levelname)s %(asctime)s %(message)s',
datefmt='%m/%d/%Y%I:%M:%S %p')
logger = logging.getLogger('my_logger')
বা পছন্দ মত:
import logging
from logging.handlers import RotatingFileHandler
handlers = [
RotatingFileHandler(filename=logpath+filename, mode='w', maxBytes=512000,
backupCount=4)
]
logging.basicConfig(handlers=handlers, level=debug_level,
format='%(levelname)s %(asctime)s %(message)s',
datefmt='%m/%d/%Y%I:%M:%S %p')
logger = logging.getLogger('my_logger')
হ্যান্ডলারগুলির পরিবর্তনশীলটির পুনরাবৃত্ত হওয়া দরকার। লগপথ + ফাইলের নাম এবং ডিবাগ_লেভেল কেবল সম্পর্কিত ভেরিয়েবল সম্পর্কিত তথ্য। অবশ্যই, ফাংশন প্যারামগুলির জন্য মানগুলি আপনার উপর নির্ভর করে।
প্রথমবার যখন আমি লগিং মডিউলটি ব্যবহার করছিলাম তখন আমি নিম্নলিখিতটি লিখতে ভুল করেছিলাম যা একটি ওএস ফাইল লক ত্রুটি উত্পন্ন করে (উপরের দিকটিই এর সমাধান):
import logging
from logging.handlers import RotatingFileHandler
logging.basicConfig(filename=logpath+filename, level=debug_level, format='%(levelname)s %(asctime)s %(message)s', datefmt='%m/%d/%Y
%I:%M:%S %p')
logger = logging.getLogger('my_logger')
logger.addHandler(RotatingFileHandler(filename=logpath+filename, mode='w',
maxBytes=512000, backupCount=4))
আর বব তোমার মামা!
http://docs.python.org/library/logging.handlers.html#filehandler
FileHandlerবর্গ, কোর অবস্থিতloggingপ্যাকেজ, একটি ডিস্ক ফাইলে লগিং আউটপুট পাঠায়।
FileHandlerবিভিন্ন পরিস্থিতিতে বিভিন্ন ধরণের রয়েছে । ( WatchedFileHandler, RotatingFileHandlerইত্যাদি)
এই উদাহরণটি ভাল কাজ করা উচিত। আমি কনসোলের জন্য স্ট্রিমহ্যান্ডলার যুক্ত করেছি। কনসোল লগ এবং ফাইল হ্যান্ডলার ডেটা একই হওয়া উচিত।
# MUTHUKUMAR_TIME_DATE.py #>>>>>>>> file name(module)
import sys
import logging
import logging.config
# ================== Logger ================================
def Logger(file_name):
formatter = logging.Formatter(fmt='%(asctime)s %(module)s,line: %(lineno)d %(levelname)8s | %(message)s',
datefmt='%Y/%m/%d %H:%M:%S') # %I:%M:%S %p AM|PM format
logging.basicConfig(filename = '%s.log' %(file_name),format= '%(asctime)s %(module)s,line: %(lineno)d %(levelname)8s | %(message)s',
datefmt='%Y/%m/%d %H:%M:%S', filemode = 'w', level = logging.INFO)
log_obj = logging.getLogger()
log_obj.setLevel(logging.DEBUG)
# log_obj = logging.getLogger().addHandler(logging.StreamHandler())
# console printer
screen_handler = logging.StreamHandler(stream=sys.stdout) #stream=sys.stdout is similar to normal print
screen_handler.setFormatter(formatter)
logging.getLogger().addHandler(screen_handler)
log_obj.info("Logger object created successfully..")
return log_obj
# =======================================================
MUTHUKUMAR_LOGGING_CHECK.py #>>>>>>>>>>> file name
# calling **Logger** function
file_name = 'muthu'
log_obj =Logger(file_name)
log_obj.info("yes hfghghg ghgfh".format())
log_obj.critical("CRIC".format())
log_obj.error("ERR".format())
log_obj.warning("WARN".format())
log_obj.debug("debug".format())
log_obj.info("qwerty".format())
log_obj.info("asdfghjkl".format())
log_obj.info("zxcvbnm".format())
# closing file
log_obj.handlers.clear()
OUTPUT:
2019/07/13 23:54:40 MUTHUKUMAR_TIME_DATE,line: 17 INFO | Logger object created successfully..
2019/07/13 23:54:40 MUTHUKUMAR_LOGGING_CHECK,line: 8 INFO | yes hfghghg ghgfh
2019/07/13 23:54:40 MUTHUKUMAR_LOGGING_CHECK,line: 9 CRITICAL | CRIC
2019/07/13 23:54:40 MUTHUKUMAR_LOGGING_CHECK,line: 10 ERROR | ERR
2019/07/13 23:54:40 MUTHUKUMAR_LOGGING_CHECK,line: 11 WARNING | WARN
2019/07/13 23:54:40 MUTHUKUMAR_LOGGING_CHECK,line: 12 DEBUG | debug
2019/07/13 23:54:40 MUTHUKUMAR_LOGGING_CHECK,line: 13 INFO | qwerty
2019/07/13 23:54:40 MUTHUKUMAR_LOGGING_CHECK,line: 14 INFO | asdfghjkl
2019/07/13 23:54:40 MUTHUKUMAR_LOGGING_CHECK,line: 15 INFO | zxcvbnm
Thanks,
ফর্ম্যাট বিবরণ
#%(name)s Name of the logger (logging channel).
#%(levelname)s Text logging level for the message ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL').
#%(asctime)s Human-readable time when the LogRecord was created. By default this is of the form ``2003-07-08 16:49:45,896'' (the numbers after the comma are millisecond portion of the time).
#%(message)s The logged message.
কল করার সাধারণ উপায়
import logging
#logging.basicConfig(level=logging.INFO)
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.info('Start reading database')
# read database here
records = {'john': 55, 'tom': 66}
logger.debug('Records: %s', records)
logger.info('Updating records ...')
# update records here
logger.info('Finish updating records')
আউটপুট
INFO:__main__:Start reading database
DEBUG:__main__:Records: {'john': 55, 'tom': 66}
INFO:__main__:Updating records ...
INFO:__main__:Finish updating records
ডিক্ট, কল মান ব্যবহার করে
import logging
import logging.config
import otherMod2
def main():
"""
Based on http://docs.python.org/howto/logging.html#configuring-logging
"""
dictLogConfig = {
"version":1,
"handlers":{
"fileHandler":{
"class":"logging.FileHandler",
"formatter":"myFormatter",
"filename":"config2.log"
}
},
"loggers":{
"exampleApp":{
"handlers":["fileHandler"],
"level":"INFO",
}
},
"formatters":{
"myFormatter":{
"format":"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
}
}
}
logging.config.dictConfig(dictLogConfig)
logger = logging.getLogger("exampleApp")
logger.info("Program started")
result = otherMod2.add(7, 8)
logger.info("Done!")
if __name__ == "__main__":
main()
otherMod2.py
import logging
def add(x, y):
""""""
logger = logging.getLogger("exampleApp.otherMod2.add")
logger.info("added %s and %s to get %s" % (x, y, x+y))
return x+y
আউটপুট
2019-08-12 18:03:50,026 - exampleApp - INFO - Program started
2019-08-12 18:03:50,026 - exampleApp.otherMod2.add - INFO - added 7 and 8 to get 15
2019-08-12 18:03:50,027 - exampleApp - INFO - Done!