تسجيل ملف التطبيقات
func main() {
app := iris.Default()
// تسجيل في ملف
// تعطيل الألوان تلقائيًا عند الكتابة إلى ملف
f, _ := os.Create("iris.log")
app.Logger().SetOutput(f)
// إذا كنت بحاجة إلى كتابة السجلات إلى ملف والوحدة التحكم معًا، استخدم الكود التالي
// app.Logger().AddOutput(os.Stdout)
app.Get("/ping", func(ctx iris.Context) {
ctx.WriteString("pong")
})
app.Listen(":8080")
}
التحكم في ألوان إخراج السجل
بشكل افتراضي، يتم تلوين إخراج السجل على وحدة التحكم بناءً على اكتشاف TTY.
قم بتخصيص عناوين المستوى والنص واللون والنمط في الحالات العادية.
استورد golog
و pio
:
import (
"github.com/kataras/golog"
"github.com/kataras/pio"
// [...]
)
احصل على مستوى معين للتخصيص، مثل DebugLevel
:
level := golog.Levels[golog.DebugLevel]
لديك التحكم الكامل في نص المستوى وعنوانه ونمطه:
// اسم المستوى
// يتم استخدام الأسماء بالحروف الصغيرة لتحويل سلسلة المستوى إلى نوع المستوى الصحيح
Name string
// الأسماء البديلة هي الأسماء التي يمكن الرجوع إليها بهذا المستوى المحدد
// مثل Name = "warn"
// AlternativeNames = []string{"warning"}، وهذا حقل اختياري،
// لذلك نحتفظ بالاسم كسلسلة بسيطة وننشئ هذا الحقل الجديد.
AlternativeNames []string
// العنوان هو بادئة مستوى السجل.
// هناك أيضًا `ColorCode` و `Style`.
// يجب أن تكون `ColorCode` و `Style` متسقة بين الكتّاب.
Title string
// `ColorCode` هو لون "العنوان".
ColorCode int
// `Style` هو واحد أو أكثر من الخيارات الغنية لـ "العنوان".
Style []pio.RichOption
كود مثال:
level := golog.Levels[golog.DebugLevel]
level.Name = "debug" // افتراضي
level.Title = "[DBUG]" // افتراضي
level.ColorCode = pio.Yellow // افتراضي
تغيير تنسيق الإخراج:
app.Logger().SetFormat("json", " ")
تسجيل مُحدد تنسيق مخصص:
app.Logger().RegisterFormatter(new(myFormatter))
واجهة golog.Formatter على النحو التالي:
// المُحدد مسؤول عن طباعة سجل إلى كاتب السجل.
type Formatter interface {
// اسم المُحدد.
String() string
// تحديد أي خيارات وإرجاع كائن مستنسخ، إذا كانت شائعة. انظر `Logger.SetFormat`.
Options(opts ...interface{}) Formatter
// يكتب "السجل" إلى "dest" سجل.
Format(dest io.Writer, log *Log) bool
}
تغيير الإخراج والتنسيق حسب المستوى:
app.Logger().SetLevelOutput("error", os.Stderr)
app.Logger().SetLevelFormat("json")
تسجيل الطلبات
يُستخدم سجل التطبيق الذي رأيناه أعلاه أساسًا لتسجيل المعلومات والأخطاء المتعلقة بالتطبيق. من ناحية أخرى، يُستخدم سجل الوصول الذي نراه أدناه في الأساس لتسجيل الطلبات والاستجابات الواردة لبروتوكول نقل النص الفائق HTTP.
package main
import (
"os"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/middleware/accesslog"
)
// اقرأ المثال وتعليقاته بعناية.
func makeAccessLog() *accesslog.AccessLog {
// قم بتهيئة وسيط سجل وصول جديد.
ac := accesslog.File("./access.log")
// احذف هذا السطر لتعطيل التسجيل إلى وحدة التحكم:
ac.AddOutput(os.Stdout)
// التكوين الافتراضي:
ac.Delim = '|'
ac.TimeFormat = "2006-01-02 15:04:05"
ac.Async = false
ac.IP = true
ac.BytesReceivedBody = true
ac.BytesSentBody = true
ac.BytesReceived = false
ac.BytesSent = false
ac.BodyMinify = true
ac.RequestBody = true
ac.ResponseBody = false
ac.KeepMultiLineError = true
ac.PanicLog = accesslog.LogHandler
// استخدام تنسيق السطر الافتراضي إذا كان المنسق مفقودًا:
// الوقت|التأخير|الحالة|الطريقة|المسار|الآي بي|معاملات الاستعلام للمسار|البايتات المستلمة|البايتات المُرسلة|الطلب|الاستجابة|
//
// ضبط منسق مخصص:
ac.SetFormatter(&accesslog.JSON{
Indent: " ",
HumanTime: true,
})
// ac.SetFormatter(&accesslog.CSV{})
// ac.SetFormatter(&accesslog.Template{Text: "{{.Code}}"})
return ac
}
func main() {
ac := makeAccessLog()
defer ac.Close() // أغلق الملف.
app := iris.New()
// سجّل وسيطًا (يمكن استخدام UseRouter أيضًا للقبض على أخطاء HTTP).
app.UseRouter(ac.Handler)
app.Get("/", indexHandler)
app.Listen(":8080")
}
func indexHandler(ctx iris.Context) {
ctx.WriteString("موافق")
}
اقرأ المزيد من الأمثلة هنا: \_examples/logging/request-logger.