আমি জানি এটি ইতিমধ্যে একটি সমাধান করা উত্তর, তবে জ্যাঙ্গো> = 1.3 অনুসারে একটি নতুন লগিং সেটিং রয়েছে।
পুরানো থেকে নতুনে স্থানান্তর স্বয়ংক্রিয় নয়, তাই আমি ভেবেছিলাম এটি এখানে লিখে রাখব।
এবং অবশ্যই আরও কিছু জন্য জ্যাঙ্গো ডক চেকআউট করুন ।
এটিই বেসিক কনফ, যা জ্যাঙ্গো-অ্যাডমিন ক্রিয়েটপ্রজেক্ট ভি 1.3-র সাথে ডিফল্টরূপে তৈরি হয়েছিল - মাইলেজটি সর্বশেষ জ্যাঙ্গো সংস্করণগুলির সাথে পরিবর্তিত হতে পারে:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
}
}
}
এই কাঠামোটি স্ট্যান্ডার্ড পাইথন লগিং ডোকনফনফিগের উপর ভিত্তি করে তৈরি করা হয়েছে যা নিম্নলিখিত ব্লকগুলি নির্দেশ করে:
আমি সাধারণত কমপক্ষে এটি করি:
- একটি। লগ ফাইল যুক্ত করুন
- এই লগ লিখতে আমার অ্যাপ্লিকেশন কনফিগার করুন
যা অনুবাদ করে:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'null': {
'level':'DEBUG',
'class':'django.utils.log.NullHandler',
},
'console':{
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
# I always add this handler to facilitate separating loggings
'log_file':{
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(VAR_ROOT, 'logs/django.log'),
'maxBytes': '16777216', # 16megabytes
'formatter': 'verbose'
},
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'apps': { # I keep all my of apps under 'apps' folder, but you can also add them one by one, and this depends on how your virtualenv/paths are set
'handlers': ['log_file'],
'level': 'INFO',
'propagate': True,
},
},
# you can also shortcut 'loggers' and just configure logging for EVERYTHING at once
'root': {
'handlers': ['console', 'mail_admins'],
'level': 'INFO'
},
}
সম্পাদন করা
অনুরোধ ব্যতিক্রম দেখুন এখন সর্বদা লগ এবং টিকিট # 16288 :
আমি উপরে উল্লিখিত নমুনা কনফটাকে মেইল_অ্যাডমিনগুলির জন্য সঠিক ফিল্টারটি স্পষ্টভাবে অন্তর্ভুক্ত করার জন্য আপডেট করেছি যাতে ডিফল্ট হিসাবে, ডিবাগটি সত্য হলে ইমেলগুলি প্রেরণ করা হয় না।
আপনার একটি ফিল্টার যুক্ত করা উচিত:
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
এবং এটি মেল_ডমিনস হ্যান্ডলারটিতে প্রয়োগ করুন:
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True,
}
অন্যথায় django.core.handers.base.handle_uncaught_exceptionসেটিংস যদি 'django.request' লগারে ত্রুটিগুলি পাস করে না DE DEBUG সত্য।
আপনি যদি জাজানো 1.5 তে এটি না করেন তবে আপনি একটি পাবেন
অবমানন সতর্কতা: 'মেল_এডমিনস' লগিং হ্যান্ডলারের উপর আপনার কোনও ফিল্টার সংজ্ঞায়িত করা হয়নি: অন্তর্নিহিত ডিবাগ-ভুয়া-কেবল ফিল্টার যুক্ত করুন
তবে জিনিসগুলি এখনও দু'টি জাজানো 1.4 এবং জাজানো 1.5 তে সঠিকভাবে কাজ করবে।
** শেষ সম্পাদনা **
সেই কনফটি জ্যাঙ্গো ডকের নমুনা কনফ থেকে প্রবলভাবে অনুপ্রাণিত হয়েছে, তবে লগ ফাইলের অংশটি যুক্ত করছে।
আমি প্রায়শই নিম্নলিখিতগুলিও করি:
LOG_LEVEL = 'DEBUG' if DEBUG else 'INFO'
...
'level': LOG_LEVEL
...
তারপরে আমার অজগর কোডটিতে আমি সর্বদা একটি নুলহ্যান্ডলার যুক্ত করি যদি কোনও লগিং কনফারেন্স নির্ধারিত না হয়। এটি কোনও হ্যান্ডলার নির্দিষ্ট না করার জন্য সতর্কতা এড়ান। বিশেষত কেবল জাজানো ( রেফ ) -তে ডাকা হয় না এমন লিবসের জন্য বিশেষভাবে কার্যকর
import logging
# Get an instance of a logger
logger = logging.getLogger(__name__)
class NullHandler(logging.Handler): #exists in python 3.1
def emit(self, record):
pass
nullhandler = logger.addHandler(NullHandler())
# here you can also add some local logger should you want: to stdout with streamhandler, or to a local file...
[...]
logger.warning('etc.etc.')
আশাকরি এটা সাহায্য করবে!