Jdbi: [طلب الميزة] توفير طريقة لتسجيل التفاعلات مع قاعدة البيانات

تم إنشاؤها على ٢ مارس ٢٠٢١  ·  7تعليقات  ·  مصدر: jdbi/jdbi

أنا جديد إلى حد ما على جدبي. كنت أحاول الاندماج مع Spring Boot وكل شيء يسير على ما يرام حتى الآن في اختباراتي (الأساسية جدًا).

ما لم أتمكن من العثور عليه هو طريقة لتسجيل التفاعلات مع قاعدة البيانات - وهي نفس النتيجة التي يمكن للمرء تحقيقها عند تحويل Hibernate's show-sql إلى true .

لم أجد طريقة لتصور هذا ، لذلك كنت أتوقع (مجموعة) إعداد (إعدادات) التكوين ، أو شيء مثل زيادة مستوى السجل في مساحة (مساحات) معينة ، إلخ.

أنا أعلم أن Jdbi تستخدم SQL خامًا تقريبًا ، ولكن من الجيد دائمًا أن تكون قادرًا على رؤية ما يفعله إطار العمل / المكتبة لأغراض التصحيح ، إلخ.

سؤال StackOverflow الإجباري: https://stackoverflow.com/questions/66431905/log-jdbi-interactions-with-database

feature question

التعليق الأكثر فائدة

حسنًا ، لكي يوفر jdbi ضمانة ، سنحتاج إلى توفير وحدة منفصلة أو اعتماد وقت تشغيل على جميع أطر عمل المسجل الكبيرة ، على الرغم من أنني لا أتذكر أكثر من slf4j و log4j atm. إما أن تمر بمصنع مثل jdbi.setSqlLogger(SqlLogger.standardPattern(myLoggerInstance::info)) حيث تكون الوسيطة هي Consumer<String> واختيارياً نمط String.format من اختيارك.

لقد ألقيت نظرة على أداة التسجيل في مشروع الحيوانات الأليفة الخاص بي ولدي بعض المنطق الشامل هناك ، لأنني أصر على اسم مثيل مسجل slf4j مختلف لـ SqlObjects ، وقم بفحص isLevelEnabled للأجيال القادمة ، وإخراج الحد المعلمات في بيان السجل.

بدلاً من تقديم واحد من بين النكهات الممكنة اللانهائية للتنفيذ التي ستتم مناقشتها إلى الأبد ، ماذا عن حل وسط في شكل واجهة مبسطة تتلقى Map<String, String> من معلمات الجمل المجمعة بالفعل وسلسلة جملة sql ؟ أعتقد أن هذا يغطي 99٪ مما يريده الناس من تسجيل SQL. كل ما عليك فعله هو الحصول على مثيل خاص بك من المسجل (والذي يمكننا أيضًا على سبيل المثال توفير كائن مميز مثل SqlObject المالك إن وجد) ، والتحقق من المستوى الممكّن إذا كنت تريد ، وتمرير المعلمات باستخدام سلسلة التنسيق. إنه ليس أقل أهمية بكثير من أي مصانع يمكننا توفيرها ، على ما أعتقد.

ال 7 كومينتر

هل صادفت https://jdbi.org/#_sqllogger ؟

لقد قرأت عن SqlLogger أثناء البحث عن هذا ، ولكن يبدو أنه سيتعين على المرء بالفعل تنفيذ حل بهذه الواجهة كنقطة بداية ، بدلاً من Jdbi الذي يوفر بالفعل هذه الوظيفة افتراضيًا ، والمستهلكين (نحن للمطورين) أن يكونوا قادرين على التحكم في هذا التسجيل عن طريق تعيين مستوى معين و / أو تشغيله / إيقاف تشغيله بناءً على الاحتياجات.

حسنًا ، لكي يوفر jdbi ضمانة ، سنحتاج إلى توفير وحدة منفصلة أو اعتماد وقت تشغيل على جميع أطر عمل المسجل الكبيرة ، على الرغم من أنني لا أتذكر أكثر من slf4j و log4j atm. إما أن تمر بمصنع مثل jdbi.setSqlLogger(SqlLogger.standardPattern(myLoggerInstance::info)) حيث تكون الوسيطة هي Consumer<String> واختيارياً نمط String.format من اختيارك.

لقد ألقيت نظرة على أداة التسجيل في مشروع الحيوانات الأليفة الخاص بي ولدي بعض المنطق الشامل هناك ، لأنني أصر على اسم مثيل مسجل slf4j مختلف لـ SqlObjects ، وقم بفحص isLevelEnabled للأجيال القادمة ، وإخراج الحد المعلمات في بيان السجل.

بدلاً من تقديم واحد من بين النكهات الممكنة اللانهائية للتنفيذ التي ستتم مناقشتها إلى الأبد ، ماذا عن حل وسط في شكل واجهة مبسطة تتلقى Map<String, String> من معلمات الجمل المجمعة بالفعل وسلسلة جملة sql ؟ أعتقد أن هذا يغطي 99٪ مما يريده الناس من تسجيل SQL. كل ما عليك فعله هو الحصول على مثيل خاص بك من المسجل (والذي يمكننا أيضًا على سبيل المثال توفير كائن مميز مثل SqlObject المالك إن وجد) ، والتحقق من المستوى الممكّن إذا كنت تريد ، وتمرير المعلمات باستخدام سلسلة التنسيق. إنه ليس أقل أهمية بكثير من أي مصانع يمكننا توفيرها ، على ما أعتقد.

في هذه الأثناء ، هذا هو بالضبط ما أحتاجه لتصحيح أخطاء SQL بالانتقال إلى قاعدة البيانات إذا كان ذلك يساعد أي شخص آخر.

    class SqlLoggerImpl : SqlLogger {
        private val logger = LoggerFactory.getLogger(this::class.java)
        override fun logBeforeExecution(context: StatementContext?) {
            if (logger.isDebugEnabled && context != null) {
                logger.debug(context.statement.toString())
            }
        }
    }

ثم عند إنشاء مثيل JDBI

jdbi.setSqlLogger(SqlLoggerImpl())

يمكننا تضمين تطبيق slf4j بسيطًا خارج الصندوق ، لأننا نعتمد عليه بالفعل.

أعتقد أن هذا كل ما تحتاجه. يمكن للأشخاص ربط هذا بإطار عمل التسجيل المفضل لديهم عبر أحد "الجسور" المتاحة.

بالإضافة إلى ذلك ، ستكون هناك حاجة لطباعة الاستعلامات وارتباطات القيمة أيضًا على مستوى تسجيل محدد مسبقًا - debug أو trace سيعمل بشكل مثالي لهذه المناسبة.

@ x80486 ما رأيك في # 1828؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات