التسجيل (Logging)#
بُنيت واجهة التسجيل في Vapor فوق SwiftLog. هذا يعني أن Vapor متوافق مع جميع تنفيذات الواجهة الخلفية الخاصة بـ SwiftLog.
المُسجِّل (Logger)#
تُستخدم نُسخ Logger لإخراج رسائل التسجيل. يوفر Vapor بضع طرق سهلة للوصول إلى مُسجِّل.
الطلب (Request)#
لكل Request وارد مُسجِّل فريد ينبغي لك استخدامه لأي سجلات خاصة بذلك الطلب.
app.get("hello") { req -> String in
req.logger.info("Hello, logs!")
return "Hello, world!"
}
يتضمن مُسجِّل الطلب مُعرِّف UUID فريدًا يحدد الطلب الوارد لتسهيل تتبُّع السجلات.
[ INFO ] Hello, logs! [request-id: C637065A-8CB0-4502-91DC-9B8615C5D315] (App/routes.swift:10)
معلومة
ستُعرض بيانات المُسجِّل الوصفية (metadata) فقط عند مستوى تسجيل التصحيح (debug) أو أقل.
التطبيق (Application)#
لرسائل التسجيل أثناء إقلاع التطبيق وتهيئته، استخدم مُسجِّل Application.
app.logger.info("Setting up migrations...")
app.migrations.use(...)
مُسجِّل مخصص#
في المواقف التي لا يمكنك فيها الوصول إلى Application أو Request، يمكنك تهيئة Logger جديد.
let logger = Logger(label: "dev.logger.my")
logger.info(...)
بينما ستظل المُسجِّلات المخصصة تُخرِج إلى الواجهة الخلفية للتسجيل التي هيّأتها، فلن تكون لها بيانات وصفية مهمة مرفقة مثل UUID الطلب. استخدم المُسجِّلات الخاصة بالطلب أو التطبيق حيثما أمكن.
المستوى (Level)#
يدعم SwiftLog عدة مستويات تسجيل مختلفة.
| الاسم | الوصف |
|---|---|
| trace | مناسب للرسائل التي تحتوي على معلومات تكون مفيدة عادةً فقط عند تتبُّع تنفيذ برنامج ما. |
| debug | مناسب للرسائل التي تحتوي على معلومات تكون مفيدة عادةً فقط عند تصحيح برنامج ما. |
| info | مناسب للرسائل المعلوماتية. |
| notice | مناسب للحالات التي ليست حالات خطأ، لكنها قد تتطلب معالجة خاصة. |
| warning | مناسب للرسائل التي ليست حالات خطأ، لكنها أكثر خطورة من notice. |
| error | مناسب لحالات الخطأ. |
| critical | مناسب لحالات الخطأ الحرجة التي تتطلب عادةً اهتمامًا فوريًا. |
عند تسجيل رسالة critical، تكون الواجهة الخلفية للتسجيل حرة في تنفيذ عمليات أثقل لالتقاط حالة النظام (مثل التقاط تتبُّعات المكدس) لتسهيل التصحيح.
افتراضيًا، سيستخدم Vapor مستوى تسجيل info. عند التشغيل في بيئة production، سيُستخدم notice لتحسين الأداء.
تغيير مستوى التسجيل#
بغض النظر عن وضع البيئة، يمكنك تجاوز مستوى التسجيل لزيادة أو تقليل كمية السجلات المُنتجة.
الطريقة الأولى هي تمرير الراية الاختيارية --log عند إقلاع تطبيقك.
swift run App serve --log debug
الطريقة الثانية هي تعيين متغير البيئة LOG_LEVEL.
export LOG_LEVEL=debug
swift run App serve
يمكن تنفيذ كلتيهما في Xcode عن طريق تحرير مخطط (scheme) App.
التهيئة (Configuration)#
يُهيَّأ SwiftLog عن طريق تمهيد (bootstrapping) الـ LoggingSystem مرة واحدة لكل عملية. عادةً ما تقوم مشاريع Vapor بذلك في entrypoint.swift.
var env = try Environment.detect()
try LoggingSystem.bootstrap(from: &env)
bootstrap(from:) هي دالة مساعدة يوفرها Vapor وستهيّئ معالج التسجيل الافتراضي بناءً على معاملات سطر الأوامر ومتغيرات البيئة. يدعم معالج التسجيل الافتراضي إخراج الرسائل إلى الطرفية مع دعم ألوان ANSI.
معالج مخصص#
يمكنك تجاوز معالج التسجيل الافتراضي في Vapor وتسجيل معالجك الخاص.
import Logging
LoggingSystem.bootstrap { label in
StreamLogHandler.standardOutput(label: label)
}
ستعمل جميع الواجهات الخلفية المدعومة من SwiftLog مع Vapor. غير أن تغيير مستوى التسجيل باستخدام معاملات سطر الأوامر ومتغيرات البيئة متوافق فقط مع معالج التسجيل الافتراضي في Vapor.