আমি ডিককনফিগ ব্যবহার করতে চাই , তবে ডকুমেন্টেশনটি কিছুটা বিমূর্ত। আমি কোথায় ব্যবহার করতে চাইছি এর একটি কংক্রিট, অনুলিপি + পেস্ট-সক্ষম উদাহরণ dictConfig
?
আমি ডিককনফিগ ব্যবহার করতে চাই , তবে ডকুমেন্টেশনটি কিছুটা বিমূর্ত। আমি কোথায় ব্যবহার করতে চাইছি এর একটি কংক্রিট, অনুলিপি + পেস্ট-সক্ষম উদাহরণ dictConfig
?
উত্তর:
কিভাবে সম্পর্কে এখানে!
LOGGING_CONFIG = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
},
},
'handlers': {
'default': {
'level': 'INFO',
'formatter': 'standard',
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout', # Default is stderr
},
},
'loggers': {
'': { # root logger
'handlers': ['default'],
'level': 'WARNING',
'propagate': False
},
'my.packg': {
'handlers': ['default'],
'level': 'INFO',
'propagate': False
},
'__main__': { # if __name__ == '__main__'
'handlers': ['default'],
'level': 'DEBUG',
'propagate': False
},
}
}
ব্যবহার:
# Run once at startup:
logging.config.dictConfig(LOGGING_CONFIG)
# Include in each module:
log = logging.getLogger(__name__)
log.debug("Logging is configured.")
আপনি যদি তৃতীয় পক্ষের প্যাকেজগুলি থেকে অনেক বেশি লগ দেখতে পান তবে তৃতীয় পক্ষের প্যাকেজগুলি আমদানি করার logging.config.dictConfig(LOGGING_CONFIG)
আগে ব্যবহার করে এই কনফিগারেশনটি চালানোর বিষয়ে নিশ্চিত হন ।
তথ্যসূত্র: https://docs.python.org/3/library/logging.config.html#configration-d অভিধান- schema
'disable_existing_loggers': False
আপনি সম্ভবত এটি পুরো কাপড়টি কনফিগার করছেন না, তবে ইতিমধ্যে সেখানে থাকা কোনও জিনিস পুনরায় ব্যবহার করছেন .. আপনি যদি এটি সেট করেন True
তবে আমার কোনও আউটপুট পাওয়া যাবে বলে মনে হয় না।
format
থেকে formatters
?
গৃহীত উত্তরটি দুর্দান্ত! কিন্তু যদি কেউ কম জটিল কিছু দিয়ে শুরু করতে পারে? লগিং মডিউলটি খুব শক্তিশালী জিনিস এবং ডকুমেন্টেশনটি বিশেষত নুবিদের পক্ষে কিছুটা অভিভূত হয়। তবে শুরুতে আপনার বিন্যাস এবং হ্যান্ডলারের কনফিগার করার দরকার নেই। আপনি কী চান তা নির্ধারণ করার সময় আপনি এটি যুক্ত করতে পারেন।
উদাহরণ স্বরূপ:
import logging.config
DEFAULT_LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'loggers': {
'': {
'level': 'INFO',
},
'another.module': {
'level': 'DEBUG',
},
}
}
logging.config.dictConfig(DEFAULT_LOGGING)
logging.info('Hello, log')
logging.info('Hello, log')
আমার জন্য জিনিসগুলিকে ক্লিক করে। ডকুমেন্টেশনের বিভ্রান্তি হ'ল ডোকনফনফিগের সাহায্যে আমাদের আর আর getLogger
কোনও ক্রিয়া করার দরকার নেই ।
'': { 'level': 'INFO'...
এবং এটি ব্যতীত কেন কাজ করে না (উদাহরণস্বরূপ ফাঁকা মানটি কোনও বৈধ মান হিসাবে পরিবর্তন করার সময়standard
getLogger()
আপনি বিভিন্ন নাম সহ একাধিক লগার চাইলে এখনও ফোন করা এটি দরকারী । এই লগারগুলির প্রতিটি রুট লগার থেকে কনফিগারেশন উত্তরাধিকার সূত্রে প্রাপ্ত।
getLogger
সর্বদা alচ্ছিক । logging.info()
পদ্ধতিটি সরাসরি ব্যবহার করার সময় রুট লগারটি ব্যবহার করা হয়, তবে getLogger()
আপনার সাথে আলাদা আলাদা নাম এবং স্তর থাকতে পারে log
স্ট্রিম হ্যান্ডলার, ফাইল হ্যান্ডলার, ফাইল হ্যান্ডলার এবং এসএমটিপি হ্যান্ডলার ঘোরানো সহ উদাহরণ
from logging.config import dictConfig
LOGGING_CONFIG = {
'version': 1,
'loggers': {
'': { # root logger
'level': 'NOTSET',
'handlers': ['debug_console_handler', 'info_rotating_file_handler', 'error_file_handler', 'critical_mail_handler'],
},
'my.package': {
'level': 'WARNING',
'propagate': False,
'handlers': ['info_rotating_file_handler', 'error_file_handler' ],
},
},
'handlers': {
'debug_console_handler': {
'level': 'DEBUG',
'formatter': 'info',
'class': 'logging.StreamHandler',
'stream': 'ext://sys.stdout',
},
'info_rotating_file_handler': {
'level': 'INFO',
'formatter': 'info',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'info.log',
'mode': 'a',
'maxBytes': 1048576,
'backupCount': 10
},
'error_file_handler': {
'level': 'WARNING',
'formatter': 'error',
'class': 'logging.FileHandler',
'filename': 'error.log',
'mode': 'a',
},
'critical_mail_handler': {
'level': 'CRITICAL',
'formatter': 'error',
'class': 'logging.handlers.SMTPHandler',
'mailhost' : 'localhost',
'fromaddr': 'monitoring@domain.com',
'toaddrs': ['dev@domain.com', 'qa@domain.com'],
'subject': 'Critical error with application name'
}
},
'formatters': {
'info': {
'format': '%(asctime)s-%(levelname)s-%(name)s::%(module)s|%(lineno)s:: %(message)s'
},
'error': {
'format': '%(asctime)s-%(levelname)s-%(name)s-%(process)d::%(module)s|%(lineno)s:: %(message)s'
},
},
}
dictConfig(LOGGING_CONFIG)
আমি নীচে জ্যাঙ্গো ভি 1.11.15 ডিফল্ট কনফিগারেশন পেয়েছি , আশা করি এটি সাহায্য করবে
DEFAULT_LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'django.server': {
'()': 'django.utils.log.ServerFormatter',
'format': '[%(server_time)s] %(message)s',
}
},
'handlers': {
'console': {
'level': 'INFO',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
},
'django.server': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'django.server',
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO',
},
'django.server': {
'handlers': ['django.server'],
'level': 'INFO',
'propagate': False,
},
}
}
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import logging.handlers
from logging.config import dictConfig
logger = logging.getLogger(__name__)
DEFAULT_LOGGING = {
'version': 1,
'disable_existing_loggers': False,
}
def configure_logging(logfile_path):
"""
Initialize logging defaults for Project.
:param logfile_path: logfile used to the logfile
:type logfile_path: string
This function does:
- Assign INFO and DEBUG level to logger file handler and console handler
"""
dictConfig(DEFAULT_LOGGING)
default_formatter = logging.Formatter(
"[%(asctime)s] [%(levelname)s] [%(name)s] [%(funcName)s():%(lineno)s] [PID:%(process)d TID:%(thread)d] %(message)s",
"%d/%m/%Y %H:%M:%S")
file_handler = logging.handlers.RotatingFileHandler(logfile_path, maxBytes=10485760,backupCount=300, encoding='utf-8')
file_handler.setLevel(logging.INFO)
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(default_formatter)
console_handler.setFormatter(default_formatter)
logging.root.setLevel(logging.DEBUG)
logging.root.addHandler(file_handler)
logging.root.addHandler(console_handler)
[31/10/2015 22:00:33] [DEBUG] [yourmodulename] [yourfunction_name():9] [PID:61314 TID:140735248744448] this is logger infomation from hello module
root
লগার নির্দিষ্ট করার জন্য একটি বিকল্প জায়গা রয়েছে : অভিধানের শীর্ষ স্তরে। এটি ডক্সে বর্ণিত হয়েছে ,['loggers']['']
উভয় উপস্থিত থাকার চেয়ে তার অগ্রাধিকার রয়েছে তবে আমার মতে['loggers']['']
এটি আরও যুক্তিযুক্ত। এখানে