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("পং")
    })

   app.Listen(":8080")
}

লগ আউটপুটের রং নিয়ন্ত্রণ

ডিফল্টভাবে, কনসোলে লগ আউটপুটটি TTY এর উপর ভিত্তি করে রঙিন করা হবে।

নিয়মিত ক্ষেত্রে স্তর শিরোনাম, টেক্সট, রঙ, এবং স্টাইল কাস্টমাইজ করুন।

golog এবং pio ইমপোর্ট করুন:

import (
    "github.com/kataras/golog"
    "github.com/kataras/pio"
    // [...]
)

কাস্টমাইজ করার জন্য একটি স্তর পেতে DebugLevel এর মত একটি স্তর পেতে:

level := golog.Levels[golog.DebugLevel]

আপনারা পূর্ণ নিয়ন্ত্রণ করতে পারেন স্তরের টেক্সট, শিরোনাম, এবং স্টাইলের উপর:

// স্তরের নাম
// ছোট বর্ণের নামগুলি ব্যবহার করা হবে
// স্ট্রিং স্তরটি সঠিক স্তর টাইপে রূপান্তর করার জন্য
নেম string
// AlternativeNames এই নির্দিষ্ট লগ স্তরগুলির নাম
// উদাহরণস্বরূপ Name = "warn"
// AlternativeNames = []string{"warning"}, এটি একটি ঐচ্ছিক ক্ষেত্র,
// সুতরাং আমরা নামকে একটি সাধারণ স্ট্রিং হিসেবে রাখি এবং এই নতুন ক্ষেত্রটি তৈরি করি।
AlternativeNames []string
// Title হল লগ স্তরের পূর্বের অংশ।
// এখানে আছে `ColorCode` এবং `Style`।
// `ColorCode` এবং `Style` লেখকরা মাঝে তিনি এবার প্রাসঙ্গিক হতে হবে।
Title string
// ColorCode নির্দিষ্ট শিরোনামের জন্য রং।
// Style এবং `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 ইন্টারফেস নিম্নলিখিত:

// ফরম্যাটারটি লগ প্রিন্ট এক লগ লিখার জন্য লগারের রচয়িতা প্রায়জনীয়।
ইন্টারফেস ফরম্যাটার {
    // ফরম্যাটারটির নাম।
    স্ট্রিং () স্ট্রিং
    // যেকোনো বিকল্প সেট এবং প্রায়জনীয়, যদি সাধারণ হয়। `Logger.SetFormat` দেখুন।
    অপশন (opts ... interface{}) Formatter
    // `লগ` কে `dest` লগারের জন্য লিখুন।
    বিন্যাস (dest io.Writer, লগ *লগ) প্রকার বুলেন
}

স্তরের মাধ্যমে আউটপুট এবং ফরম্যাট পরিবর্তন করুন:

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
    
    // ফরম্যাটার অনুপ্রেরণ না থাকলে ডিফল্ট লাইন ফরম্যাট ব্যবহার করুন:
    // সময়|রিটার্ড সময়|অবস্থা|পদ্ধতি|পথ|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("OK")
}

এখানে আরো উদাহরণ পড়ুন: _examples/logging/request-logger.