في هذه المقالة، سأشارك كيف يمكنك تغيير مستوى السجل لتطبيقك دون إعادة تشغيل التطبيق الخاص بك.
تُعتبر مستويات السجل عادةً مرتبة حسب الأهمية: قم بتشغيل المستويات "غير المهمة" في التطوير (الإشعار والتصحيح وما شابه)، ولكن قم بتمكين المستويات "الأكثر أهمية" فقط (التحذير والخطأ وما إلى ذلك) في الإنتاج، حيث تكون الموارد مثل وقت وحدة المعالجة المركزية ومساحة القرص ثمينة.
ولكن ماذا لو كان تطبيقك يعمل على مستوى الخطأ وبدأت تواجه العديد من المشكلات، لكن لا يمكنك معرفة ذلك من سجلات مستوى الخطأ، فإن تغيير مستوى السجل عن طريق إعادة نشر التطبيق سيستغرق الكثير من الوقت والموارد.
علاوة على ذلك، فإن تشغيل تطبيقك على مستوى INFO أو DEBUG في الإنتاج سيؤدي إلى إنشاء عدد كبير من السجلات التي يمكن أن تطغى على نظام التسجيل، مما يؤدي إلى زيادة عمليات الإدخال/الإخراج واستهلاك الموارد.
لإنقاذنا من هذه المشكلات، يوفر GoFr - The Ultimate Golang Framework طريقة آمنة لتغيير مستوى السجل دون إعادة تشغيل التطبيق الخاص بك.
لتغيير مستوى السجل، يتطلب أي تطبيق GoFr التكوين التالي:
REMOTE_LOG_URL=(e.g., https://log-service.com/log-levels?id=1)
يقوم GoFr بجلب نقطة النهاية المقدمة كل 15 ثانية بشكل افتراضي للحصول على أحدث مستوى للسجل، ويمكن زيادة هذا الفاصل الزمني أو تقليله عن طريق إضافة التكوين التالي.
REMOTE_LOG_FETCH_INTERVAL=(default: 15)
يتطلب GoFr الرد من عنوان URL بالتنسيق التالي مع حقلين إلزاميين:
{ "data": { "serviceName": "test-service", "logLevel": "DEBUG" } }
لنقم بإنشاء خدمة على مستوى السجل والتي ستوفر مستوى السجل لتطبيقنا.
سأستخدم GoFr لإنشاء الخدمة، راجع الوثائق لمعرفة المزيد.
سنستخدم MySQL كقاعدة بيانات، ولإضافة MySQL أضف التكوينات التالية في ملف .env في دليل التكوينات.
DB_HOST=localhost DB_USER=root DB_PASSWORD=password DB_NAME=log-level DB_PORT=2001 DB_DIALECT=mysql
لتشغيل حاوية MySQL docker قم بتشغيل الأمر التالي
docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30
لنضيف ملف main.go مع عمليات الترحيل لإنشاء جدول وسنستخدم ميزة AddRESTHandler لتسجيل المسار.
main.go
package main import ( "gofr.dev/pkg/gofr" "gofr.dev/pkg/gofr/migration" ) const createTable = `CREATE TABLE level ( id INT PRIMARY KEY, service_name VARCHAR(255) NOT NULL, log_level VARCHAR(50) NOT NULL ); ` func createTableLevel() migration.Migrate { return migration.Migrate{ UP: func(d migration.Datasource) error { _, err := d.SQL.Exec(createTable) if err != nil { return err } return nil }, } } type Level struct { ID int `json:"id"` ServiceName string `json:"serviceName"` LogLevel string `json:"logLevel"` } func (u *Level) RestPath() string { return "level" } func main() { app := gofr.New() app.Migrate(map[int64]migration.Migrate{1: createTableLevel()}) err := app.AddRESTHandlers(&Level{}) if err != nil { app.Logger().Fatalf("Failed to register routes for level struct: %v", err) } app.Run() }
بعد تشغيل خدمة السجل سنرى السجلات التالية:
لدينا جميع مسارات REST المسجلة.
لإنشاء خدمة أرسل الطلب التالي:
curl --location 'localhost:8000/level' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"INFO", "serviceName":"gofr-app" }'
لتحديث مستوى السجل أرسل الطلب التالي:
curl --location --request PUT 'localhost:8000/level/1' \ --header 'Content-Type: application/json' \ --data '{ "id":1, "logLevel":"DEBUG", "serviceName":"gofr-app" }'
للحصول على مستوى السجل أرسل الطلب التالي:
curl --location 'localhost:8000/level/1'
سيتم استخدام نفس عنوان URL في تكوينات تطبيقنا الذي يجب تغيير مستوى السجل الخاص به عن بعد.
باستخدام ميزة تغيير مستوى السجل عن بعد GoFr، سوف تحصل على فوائد مثل:
تعديلات سهلة:
قم بتعديل مستوى السجل في أي وقت دون إعادة تشغيل التطبيق. وهذا مفيد بشكل خاص أثناء استكشاف الأخطاء وإصلاحها.
الرؤية المحسنة:
قم بالتبديل بسهولة إلى مستوى سجل أكثر تفصيلاً (على سبيل المثال، DEBUG) للحصول على رؤى أعمق حول مشكلات محددة، ثم قم بالتبديل مرة أخرى إلى مستوى أقل تفصيلاً (على سبيل المثال، INFO) للتشغيل المنتظم.
تحسين الأداء:
يمكن أن يؤدي إنشاء عدد كبير من السجلات إلى إرباك نظام التسجيل، مما يؤدي إلى زيادة عمليات الإدخال/الإخراج واستهلاك الموارد، كما أن التغيير إلى مستوى التحذير أو مستوى الخطأ يقلل من عدد السجلات، ويعزز الأداء، وتقليل تكلفة السحابة.
ادعم GoFr من خلال إعطاء ⭐star: https://github.com/gofr-dev/gofr
علاوة على ذلك، يمكنك الوصول إلى نقطة النهاية العامة المجانية لتصدير وعرض آثار تطبيقك @ Tracer.gofr.dev.
لتمكينه، أضف التكوين التالي في ملف .env الخاص بك
TRACE_EXPORTER=gofr
فوائد أخرى:
إذا كنت تساهم في GOFR سواء في التطوير أو كتابة المقالات. يمكنك الحصول على swags(قمصان، ملصقات) مجانًا عن طريق ملء النموذج المقدم على GitHub Readme (في الأسفل).
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3