ضبط کننده فایل برنامه
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
// Title پیشوند سطح لاگ است.
// همچنین `ColorCode` و `Style` وجود دارد.
// `ColorCode` و `Style` بین نویسندگان باید مطلوب باشند.
Title string
// ColorCode رنگ برای `Title`.
ColorCode int
// Style یک یا چند انتخاب غنی برای `Title`.
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 به صورت زیر است:
// فرمتدهنده مسئول چاپ یک لاگ به نویسنده لاگ است.
نوع
// نام فرمتدهیکننده
String() string
// تنظیم هر گونه گزینه و بازگشت یک شیء کلون شده، اگر مشترک باشد. ببینید `Logger.SetFormat`.
Options(opts ...interface{}) Formatter
// `log` را به `dest` لاگر مینویسد.
Format(dest io.Writer, log *Log) bool
}
تغییر خروجی و فرمت براساس سطح:
app.Logger().SetLevelOutput("error", os.Stderr)
app.Logger().SetLevelFormat("json")
ثبتنویسی درخواست
لاگر برنامهی مشاهده شده در بالا در اصل برای ثبت اطلاعات و خطاهای مربوط به برنامه استفاده میشود. از سوی دیگر، لاگر دسترسی که در زیر مشاهده میشود اصولاً برای ثبت درخواستها و پاسخهای ورودی HTTP استفاده میشود.
بستهی اصلی
درآوردن (
"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
// اگر فرمتدهی اشتباه وجود داشته باشد، از فرمتدهی خط پیشفرض استفاده کنید:
// زمان|تأخیر|وضعیت|روش|مسیر|IP|پارامترهای پرسوجوی مسیر|بایتهای دریافتشده|بایتهای ارسالشده|درخواست|پاسخ|
//
// یک فرمتدهی سفارشی تنظیم کنید:
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.