」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Iris 的 AccessLog 中介軟體

Iris 的 AccessLog 中介軟體

發佈於2024-11-03
瀏覽:467

AccessLog Middleware for Iris

Iris Web 框架的 accesslog 中介軟體提供傳入 HTTP 請求的詳細記錄。此中間件具有高度可配置性,可記錄請求和回應的各個方面,包括自訂欄位。

特徵

  • 記錄請求和回應詳細資訊。
  • 支援多種輸出格式(JSON、CSV、自訂範本)。
  • 可以記錄到多個目的地(文件、標準輸出等)。
  • 非同步日誌記錄支援。
  • 可自訂的日誌欄位。
  • 可以有條件地應用中間件。

安裝

要使用accesslog中間件,您需要將其匯入您的Iris應用程式:

import (
    "github.com/kataras/iris/v12"
    "github.com/kataras/iris/v12/middleware/accesslog"
)

基本用法

以下是如何在 Iris 應用程式中使用 accesslog 中間件的基本範例:

package main

import (
    "github.com/kataras/iris/v12"
    "github.com/kataras/iris/v12/middleware/accesslog"
)

func makeAccessLog() *accesslog.AccessLog {
    ac := accesslog.File("./access.log")

    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.RequestBody = true
    ac.ResponseBody = false
    ac.KeepMultiLineError = true
    ac.PanicLog = accesslog.LogHandler

    ac.SetFormatter(&accesslog.JSON{
        Indent:    "  ",
        HumanTime: true,
    })

    return ac
}

func main() {
    ac := makeAccessLog()
    defer ac.Close()

    app := iris.New()
    app.UseRouter(ac.Handler)

    app.Get("/", func(ctx iris.Context) {
        ctx.WriteString("OK")
    })

    app.Listen(":8080")
}

配置選項

輸出目的地

您可以使用檔案或新功能設定日誌的輸出目的地:

ac := accesslog.File("./access.log")
// or
ac := accesslog.New(os.Stdout)

日誌格式

預設日誌格式為:

Time|Latency|Code|Method|Path|IP|Path Params Query Fields|Bytes Received|Bytes Sent|Request|Response|

您可以使用不同的格式化程式自訂日誌格式:

JSON 格式化程式

ac.SetFormatter(&accesslog.JSON{
    Indent:    "  ",
    HumanTime: true,
})

CSV 格式化程式

ac.SetFormatter(&accesslog.CSV{})

自訂模板格式化程序

ac.SetFormatter(&accesslog.Template{Text: "{{.Code}}"})

自訂字段

您可以為日誌條目新增自訂欄位:

ac.AddFields(func(ctx iris.Context, f *accesslog.Fields) {
    for k, v := range ctx.Request().Header {
        value := strings.Join(v, ", ")
        f.Set("request.header." k, value)
    }
})

非同步日誌記錄

啟用非同步日誌記錄以提高效能:

ac.Async = true

條件日誌記錄

您可以跳過特定路線或條件的記錄:

app.UseRouter(accesslog.SkipHandler)

進階用法

記錄到多個目的地

您可以使用 io.MultiWriter 登入多個目標:

ac.SetOutput(io.MultiWriter(os.Stdout, accesslog.File("./access.log")))

客製化時鐘

您可以為日誌時間戳記設定自訂時鐘,這對於測試很有用:

ac.Clock = accesslog.TClock(time.Now())

中介軟體集成

將accesslog中間件與其他中間件整合:

app.UseRouter(ac.Handler)
app.UseRouter(otherMiddleware)

範例

將請求記錄到 JSON 文件

ac := accesslog.File("access_log.json")
ac.SetFormatter(&accesslog.JSON{
    Indent:    "  ",
    HumanTime: true,
})
app.UseRouter(ac.Handler)

使用日誌輪轉

更多詳細資訊請參閱日誌輪替範例。

自訂欄位和模板

更多詳細資訊請參閱自訂欄位和範本範例。

監聽日誌並將其呈現給客戶端

有關更多詳細信息,請參閱日誌代理範例。

結論

Iris 的 accesslog 中間件是一個用於記錄 HTTP 請求和回應的強大工具。憑藉其靈活的配置選項以及對自訂欄位和格式的支持,它可以進行自訂以滿足任何應用程式的需求。

更多範例和詳細使用方法請參考Iris官方文件。

版本聲明 本文轉載於:https://dev.to/kataras/accesslog-middleware-for-iris-4lhm?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • CKA 全程課程日 為什麼要使用 Kubernetes?
    CKA 全程課程日 為什麼要使用 Kubernetes?
    那么,您可能已经使用 Docker 容器有一段时间了,对吧?我知道旋转第一个容器的兴奋感就像魔法一样,但随后现实袭来。您开始注意到大规模管理容器很快就会成为物流噩梦。就在那时,Kubernetes(K8s)像经验丰富的项目经理一样进入房间,准备接管并简化一切。 在这篇文章中,我们将探讨独立容器面临的...
    程式設計 發佈於2024-11-08
  • 簡要封裝範例
    簡要封裝範例
    書包: 這個範例會建立一個名為 bookpack 的包,其中包含一個用於管理書籍資料庫的簡單類別。 圖書類別: 它有私有屬性 title、author 和 pubDate(標題、作者和出版日期)。 構造方法初始化屬性。 show() 方法顯示書籍詳細資料。 BookDemo類別: 建立一個包...
    程式設計 發佈於2024-11-08
  • 適用於 AWS 雲端的簡單 SaaS 的技術堆疊
    適用於 AWS 雲端的簡單 SaaS 的技術堆疊
    介绍 注1:这里是托管的交互式演示:demo.saasconstruct.com 注 2:我每个 SaaS 设置的每月账单为 3-5 美元,其中大部分是 CI/CD 成本。 注3:模板在这里:saasconstruct.com。 我在 AWS 上完成了多个 AI PoC 和 MVP...
    程式設計 發佈於2024-11-08
  • 為什麼在事件處理程序中使用箭頭函數時「this」會出現意外行為?
    為什麼在事件處理程序中使用箭頭函數時「this」會出現意外行為?
    JavaScript - 箭頭函數與事件處理程序當使用箭頭函數作為事件處理程序的回調時,函數中的 this 值是意外的。這篇部落格文章解釋了此行為背後的原因,並提供了使用event.currentTarget.箭頭函數和詞法作用域存取預期元素的解決方案與常規函數不同,箭頭函數沒有其自己的上下文或範圍...
    程式設計 發佈於2024-11-08
  • Aurora PostgreSQL 掌握:讓您的團隊喜極而泣的防彈 Java 模型和 DAO
    Aurora PostgreSQL 掌握:讓您的團隊喜極而泣的防彈 Java 模型和 DAO
    听着,代码骑师。我即将提供一些知识,帮助您将 Aurora PostgreSQL 游戏从业余游戏转变为大联盟游戏。我们谈论的是 Java 模型和数据库访问器,它们会让您的高级开发人员喜极而泣,而您的 DBA 是否会给您买啤酒(取决于您的年龄)。 为什么这很重要: 性能:草率的模型和 ...
    程式設計 發佈於2024-11-08
  • 瞭解後端開發中的責任鏈設計模式
    瞭解後端開發中的責任鏈設計模式
    责任链 (CoR) 设计模式是一种强大的行为模式,可以显着增强后端开发。此模式允许您通过处理程序链传递请求,其中每个处理程序可以处理请求或将其传递到下一个处理程序。在本博客中,我们将从后端角度探讨 CoR 模式,特别关注其在 Web 服务中的请求验证和处理中的应用,并使用 Java 作为示例。 ...
    程式設計 發佈於2024-11-08
  • 深入研究&#專案:大學資訊查詢系統&# - 掌握 Java 和 MySQL 進行高效資料管理
    深入研究&#專案:大學資訊查詢系統&# - 掌握 Java 和 MySQL 進行高效資料管理
    透過「專案:大學資訊查詢系統」釋放資料管理的力量 - 這是一門綜合課程,引導您完成使用 Java 和 MySQL 建立強大的資訊查詢系統的過程。這種基於專案的學習體驗旨在讓您掌握將 Java 應用程式連接到 MySQL 資料庫、執行 SQL 查詢和有效檢索資料所需的基本技能。 課程...
    程式設計 發佈於2024-11-08
  • 使用 PHP 和 JavaScript 將網頁下載為 PDF
    使用 PHP 和 JavaScript 將網頁下載為 PDF
    在 PHP 中將 HTML 轉換為 PDF 很容易。讓我們更進一步,使用 PHP 和 JavaScript 將網頁轉換為 PDF 檔案。 為此,您需要安裝 Composer 和 Node。 安裝這些東西後,您需要使用 Composer 安裝 Dompdf,並使用 npm(Node 套件管理器)...
    程式設計 發佈於2024-11-08
  • 4 年內建構 AI 代理的頂級框架
    4 年內建構 AI 代理的頂級框架
    Hola,我是 Nomadev!如果您像我一样,您可能已经注意到人工智能代理正在席卷世界。说真的,人工智能代理不仅仅是炒作,它们已经在为智能系统提供动力、自动化任务并代表企业做出决策。我一直在深入研究这个领域,相信我,未来是由代理驱动的。 现在,如果您想成为这场革命的一部分并构建自己的人工智能代理...
    程式設計 發佈於2024-11-08
  • 每個開發人員都應該了解的基本 Express 請求屬性
    每個開發人員都應該了解的基本 Express 請求屬性
    在專案後端工作時,處理請求和回應至關重要。有效管理這些請求對於客戶端和伺服器之間的順利通訊至關重要。以下是每個開發人員都應該熟悉的一些常見且重要的請求屬性。 1. 請求ip Express.js 中的 req.ip 是請求物件的屬性,它提供發出請求的客戶端的 IP 位址。它傳回一個...
    程式設計 發佈於2024-11-08
  • 如何解決 Doctrine 左連接期間的「Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got 'ON'\」錯誤?
    如何解決 Doctrine 左連接期間的「Expected Doctrine\\ORM\\Query\\Lexer::T_WITH, got 'ON'\」錯誤?
    如何在Doctrine 中執行左連接當使用複雜的資料模型時,有必要透過建立多個表之間的關係來從多個表中檢索資料。左連接允許您從一個表中獲取所有行,並且僅從另一個表中獲取匹配的行。 遇到的問題在Doctrine 中嘗試左連接時可能出現的常見錯誤正在接收以下語法錯誤:[Syntax Error] lin...
    程式設計 發佈於2024-11-08
  • 使用 Java/ColdFusion/CFML 比較語言檢測程式庫(和 API)
    使用 Java/ColdFusion/CFML 比較語言檢測程式庫(和 API)
    语言检测是我们在过去的项目中需要的一个功能。 我在 2020 年写了一篇关于 Optimaize Language Detector java 库的 kju2 fork 的使用的文章。自 2015 年以来,Optimaize 库就没有更新过,kju2 分支于 2023 年 4 月 16 日被置于只...
    程式設計 發佈於2024-11-08
  • 如何在 CSS 中在背景上建立曲線?
    如何在 CSS 中在背景上建立曲線?
    在背景上創建曲線在網頁開發領域,設計師經常會遇到出於美學目的創建曲線的需要。其中一個場景是將剪切曲線放置在背景頂部,而不是右側。 要實現這一點,需要修改現有的 CSS 程式碼來調整曲線的位置和形狀。操作方法如下:調整偽元素位置:調整偽元素位置:更改偽元素的位置(.box:之前和.box: after...
    程式設計 發佈於2024-11-08
  • 捕捉 Django 應用程式中的錯誤的最佳方法
    捕捉 Django 應用程式中的錯誤的最佳方法
    在 Web 開發的世界中,錯誤是整個過程中不可避免的一部分。但對於 Django(最受歡迎的 Python Web 框架之一)來說,擁有可靠的錯誤捕獲策略可以在流暢的用戶體驗和令人沮喪的用戶體驗之間產生巨大的差異。 作為開發人員,我們經常發現自己不斷地與難以捉摸的錯誤和意外行為作鬥爭。無論您是建立...
    程式設計 發佈於2024-11-08
  • 如何將 GORM 欄位註解整合到 Protobuf 定義中?
    如何將 GORM 欄位註解整合到 Protobuf 定義中?
    將欄位註解整合到Protobuf 定義中尋求在其protobuf 定義中使用GORM 提供的欄位註解的開發人員可能會因註解缺少欄位註解而遇到挑戰Protobuf 3 語法中的本機日期時間類型。 為了解決這個問題,可以使用後處理腳本來使用所需的 GORM 註解來增強產生的原型文件。例如,給定以下 pr...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3