ضبط کننده فایل برنامه

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.