সমস্ত বর্গ কোয়েরি লগ


98

আমার ডিজেঙ্গো অ্যাপ্লিকেশন সম্পাদিত সমস্ত এসকিউএল কোয়েরিতে আমি কীভাবে লগ করতে পারি?

আমি অ্যাডমিন সাইট থেকে এসকিউএলস সহ সমস্ত কিছুতে লগ করতে চাই। আমি এই প্রশ্ন এবং একটি FAQ উত্তর দেখেছি কিন্তু আমি কোথায় রাখা উচিত তা এখনও বুঝতে পারি না

from django.db import connection
connection.queries

একটি ফাইল সব কিছু লগ ইন?

সুতরাং আমার প্রশ্নটি হল - সমস্ত এসকিউএল স্টেটমেন্ট লগড আছে এমন একটি ফাইল (all-sql.log বলুন) রাখতে আমার কী করা উচিত?


উত্তর:


19

হতে পারে https://github.com/django-debug-toolbar/django-debug-toolbar দেখুন

এটি আপনাকে প্রদত্ত পৃষ্ঠায় উত্পন্ন সমস্ত প্রশ্ন দেখতে দেবে। পাশাপাশি তারা যেখানে ঘটে থাকে তার স্ট্যাকট্রেস ইত্যাদি etc.

সম্পাদনা করুন: সমস্ত এসকিউএল ক্যোয়ারী কোনও ফাইল ইত্যাদিতে লগ করতে, তারপরে আপনি কিছু মিডলওয়্যার তৈরি করতে চাইবেন। মিডলওয়্যার প্রতিটি অনুরোধ চালানো হয়। এই ধরণের জিনিসটির জন্য সেখানে বেশ কয়েকটি জ্যাঙ্গো স্নিপেটস রয়েছে:

এগুলি টার্মিনালে মুদ্রণের সাথে সম্পর্কিত, তবে পাইথনের লগিং লাইব্রেরিটি ব্যবহার করার জন্য এগুলি মানিয়ে নেওয়া কঠিন হবে না be


177

LOGGINGআপনার ক্ষেত্রে মাঠের সাথে নিম্নলিখিত স্নিপেটটি মার্জ করুন settings.py:

LOGGING = {
    'version': 1,
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        }
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],
            'class': 'logging.StreamHandler',
        }
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
            'handlers': ['console'],
        }
    }
}

@ Acardenas89 উত্তর থেকে টুইট করা হয়েছে


4
আপনি handlersযদি হ্যান্ডলার 'কনসোল' যোগ করতে অক্ষম হন তবে আপনাকে এই বিভাগে নিম্নলিখিতটি যুক্ত করতে হতে পারে : 'কনসোল' ত্রুটি: 'console':{ 'level':'DEBUG', 'class':'logging.StreamHandler', 'formatter': 'verbose', 'stream': sys.stderr, },
ডন গ্র্যাম

4
আমিও প্রয়োজন 'version': 1,মধ্যে LOGGINGঅভি।
ড্যান

12
দয়া করে নোট করুন যে লগগুলি লগ করার জন্য অবশ্যই DEBUG সত্য হতে হবে। লগিং সেটিংস নির্বিশেষে।
জানুস স্কনিকজনি

4
ওহ, এবং DEBUGFalse@override_settings(DEBUG=True)
জাঙ্গো

7
আমি লাইনটির 'propagate': Falseপরেও যুক্ত করব 'handlers': ['console'],, আপনি যদি একটি রুট লগার সক্ষম করে থাকেন এবং কেন জানেন না যে এটি কেন দু'বার মুদ্রণ করে। আমাকে কিছুটা বুঝতে পেরেছিল।
আন্দ্রেই-নিকুলি পেট্রে

44

সেটিংস.পিতে নিম্নলিখিত সাহসী বিবৃতি যুক্ত করুন


যদি ডিবুগ:
    আমদানি লগিং
    l = logging.getLogger ('django.db.backends')
    l.setLevel (লগিং.ডিবিউজি)
    l.addHandler (লগিং। স্ট্রিমহ্যান্ডলার ())


লগিং = {
    'সংস্করণ': 1,
    'disable_existing_loggers': মিথ্যা,
    'ফিল্টার': {
        'need_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse'
        }
    },
    'হ্যান্ডলার': {
        'মেল_অ্যাডমিনস': {
            'স্তর': 'ERROR',
            'ফিল্টার': ['need_debug_false'],
            'শ্রেণি': 'django.utils.log.AdminEmailHandler'
        }, 'কনসোল':
            'স্তর': 'DEBUG',
            'শ্রেণি': 'লগিং St স্ট্রিমহ্যান্ডলার',
        } ,
    },
    'লগার': {
        'django.request': {
            'হ্যান্ডলার': ['মেইল_এডমিনস'],
            'স্তর': 'ERROR',
            'প্রচার': সত্য,
        }, 'django.db.backends.sqlite3': {
            'স্তর': 'DEBUG',
            'হ্যান্ডলার': ['কনসোল'],
        } ,
    }
}
  

রিসোর্স / ক্রেডিট


9
আপনার ifশীর্ষে এবং বিবৃতি উভয়ই দরকার নেই LOGGINGifএ বক্তব্যে আপনি কি শেল মধ্যে থাকাকালীন যেমন লগিং যোগ করতে চান তবে, তা অবিলম্বে চালু করতে জন্য চালু থাকে - সব আপনি settings.py প্রয়োজন হয় LOGGINGপরিবর্তন - এবং আপনি ভাল চাইতে পারেন django.db.backendsনা sqlite3 নির্দিষ্ট করুন।
এম সোমেরভিলে

ডিজেঙ্গো ১.৯-এ চলছে কনসোলটিতে কোনও প্রশ্ন আমি দেখতে পাচ্ছি না। DEBUG = True
সিরো সান্তিলি 郝海东 冠状 病 六四 事件

4
@ সিরোস্যান্টিলি 巴拿馬 文件 六四 事件 法轮功 এটি সত্যিই একটি পুরানো মন্তব্য, খুব সম্ভবত জ্যাঙ্গো ১.৯ এই সমাধানটিকে একইভাবে সমর্থন করে না।
শেভরিস

জাজানো ১.৯-এ, DEBUGপরীক্ষা চলাকালীন সেটিংটি ভুয়া হতে বাধ্য হয়। পরীক্ষার ক্ষেত্রে এটি পুনরায় সক্ষম করার জন্য একটি
কার্যপ্রণালী হ'ল


7

পরীক্ষার সময় এসকিউএল প্রশ্নগুলি লগ করতে আপনার দুটি জিনিস দরকার:

  1. django.db.backends লগার সক্ষম এবং
  2. @override_settings(DEBUG=True) শোভাকর

পরীক্ষক দৌড়কর্তা ডিজেঙ্গু_এসটিটিঙ্গস_মুডলিতে আপনি যা সেট করতে পারেন তা উপেক্ষা করে ডিফল্টরূপে DEBUG = মিথ্যা সেট করবেন set

সর্বনিম্ন সেটিংস:

# https://docs.djangoproject.com/en/dev/ref/settings/#logging
LOGGING = {
    'version': 1,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'level': 'DEBUG',
        },
    },
    'root': {
        'handlers': ['console'],
    }
}

উদাহরণ পরীক্ষার ক্ষেত্রে:

from django.contrib.auth.models import User
from django.test import TestCase, override_settings


class UserTests(TestCase):

    # To log queries in tests you need to manually override DEBUG setting
    # because testing sets DEBUG=False by default

    @override_settings(DEBUG=True)
    def test_create_user(self):
        User.objects.create()

2

আপনার কেবল প্রয়োজন:

@override_settings(DEBUG=True)

আপনার যদি ইতিমধ্যে এসকিউএল ডিবাগ স্টেটমেন্টগুলি মুদ্রিত হচ্ছে runserver

আপনার class TestA(TestCase)বা ডেকরেটার যুক্ত করুন test_function:

@override_settings(DEBUG=True)
class TestA(TestCase):
...

    @override_settings(DEBUG=True)
    def test_function(self):
    ...

@ জানুস স্কোনাইজজির উত্তরটির ক্রেডিট!


0

আপনার এটি মিডলওয়্যার প্যাকেজে রাখা দরকার। মিডলওয়্যারটি ওয়েব সার্ভার / জাজানো কোর এবং আপনার সমস্ত দর্শনগুলির মধ্যে বসে। এটি অনুরোধের আগে প্রাক প্রসেসিং এবং অনুরোধ শেষ হওয়ার পরে পোস্টপ্রসেসিং করতে পারে। উদাহরণস্বরূপ, প্রশ্নগুলিকে একটি ফাইলে সংরক্ষণ করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.