golang敏感数据脱敏与JSON日志格式化插件库noodlog的使用

Golang敏感数据脱敏与JSON日志格式化插件库noodlog的使用

Noodlog简介

Noodlog是一个Golang JSON参数化且高度可配置的日志库,它提供以下功能:

  • 将Go结构体打印为JSON消息
  • 将JSON字符串和原始字符串消息打印为纯JSON
  • 从日志中隐藏敏感参数
  • 在日志中链式组合对象或字符串
  • 对日志应用字符串模板
  • 可选择跟踪调用者文件和函数并微调设置
  • 应用美化打印或普通打印
  • 为日志添加颜色
  • 自定义每个日志级别的颜色

Noodlog Logo

安装

go get github.com/gyozatech/noodlog

使用示例

以下是一个完整的使用示例,展示如何配置和使用noodlog进行日志记录,包括敏感数据脱敏功能:

package main

import (
    "github.com/gyozatech/noodlog"
)

var log *noodlog.Logger

func init() {
   log = noodlog.NewLogger().SetConfigs(
      noodlog.Configs{
         LogLevel: noodlog.LevelTrace,             // 设置日志级别为Trace
         JSONPrettyPrint: noodlog.Enable,         // 启用JSON美化打印
         TraceCaller: noodlog.Enable,             // 启用调用者追踪
         Colors: noodlog.Enable,                  // 启用颜色
         CustomColors: &noodlog.CustomColors{ Trace: noodlog.Cyan }, // 自定义Trace级别颜色
         ObscureSensitiveData: noodlog.Enable,    // 启用敏感数据脱敏
         SensitiveParams: []string{"password"},   // 设置需要脱敏的参数名
      },
    )
}

func main() {
    // 简单字符串消息(使用自定义颜色)
    log.Trace("Hello world!")
    
    // 链式组合元素
    log.Info("You've reached", 3, "login attemps")
    
    // 使用字符串格式化
    log.Warn("You have %d attempts left", 2)
    
    // 记录结构体为JSON
    log.Error(struct{Code int; Error string}{500, "Generic Error"})
    
    // 记录原始JSON字符串(password字段将被脱敏)
    log.Info(`{"username": "gyozatech", "password": "Gy0zApAssw0rd"}`)
    
    // 记录JSON字符串(password字段将被脱敏)
    log.Info("{\"username\": \"nooduser\", \"password\": \"N0oDPasSw0rD\"}")
}

运行此示例后,输出将类似于:

示例输出

配置选项

日志级别

设置日志级别:

log.SetConfigs(
    noodlog.Configs{
        LogLevel: noodlog.LevelWarn, // 设置为Warn级别
    },
)

JSON美化打印

启用或禁用JSON美化打印:

log.SetConfigs(
    noodlog.Configs{
       JSONPrettyPrint: noodlog.Enable, // 启用
    },
)

log.SetConfigs(
    noodlog.Configs{
       JSONPrettyPrint: noodlog.Disable, // 禁用
    },
)

颜色

启用颜色并自定义:

log.SetConfigs(
    noodlog.Configs{
        Colors: noodlog.Enable,
        CustomColors: &noodlog.CustomColors{ 
            Trace: noodlog.Cyan, 
            Debug: noodlog.NewColorRGB(255,255,0),
            Info:  noodlog.NewColor(noodlog.Red).Background(noodlog.Cyan),
            Warn:  noodlog.NewColor(noodlog.Green).BackgroundRGB(0,255,255),
            Error: noodlog.NewColorRGB(128,255,0).Background(noodlog.Purple),    
        },
    },
)

调用者追踪

启用调用者追踪:

log.SetConfigs(
    noodlog.Configs{
        TraceCaller: noodlog.Enable,
    },
)

敏感数据脱敏

配置敏感数据脱敏:

log.SetConfigs(
    noodlog.Configs{
        ObscureSensitiveData: noodlog.Enable,
        SensitiveParams: []string{"password", "token", "secret"}, // 设置需要脱敏的字段
    },
)

总结

Noodlog是一个功能强大的Golang日志库,特别适合需要JSON格式日志和敏感数据保护的场景。通过简单的配置,您可以获得美观、安全且信息丰富的日志输出。


更多关于golang敏感数据脱敏与JSON日志格式化插件库noodlog的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang敏感数据脱敏与JSON日志格式化插件库noodlog的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


Golang敏感数据脱敏与JSON日志格式化:noodlog库使用指南

敏感数据脱敏与日志格式化的重要性

在当今的软件开发中,日志记录是不可或缺的一部分,但同时我们也需要保护敏感数据不被泄露。noodlog是一个专门为Golang设计的日志库,它提供了强大的敏感数据脱敏功能和灵活的JSON日志格式化能力。

noodlog库简介

noodlog是一个轻量级的Golang日志库,主要特点包括:

  • 自动敏感数据脱敏(如信用卡号、密码、token等)
  • 结构化JSON日志输出
  • 可配置的日志级别
  • 高性能的日志处理

安装noodlog

go get github.com/kyzykyky/noodlog

基本使用示例

package main

import (
	"github.com/kyzykyky/noodlog"
)

func main() {
	// 初始化日志记录器
	logger := noodlog.NewLogger()
	
	// 记录普通日志
	logger.Info("This is an info message")
	
	// 记录带有敏感数据的日志
	user := map[string]interface{}{
		"username": "john_doe",
		"password": "s3cr3tP@ss",
		"credit_card": "4111111111111111",
	}
	
	logger.Info("User data: %v", user)
}

敏感数据脱敏配置

noodlog默认会自动检测并脱敏常见的敏感数据模式,但你也可以自定义脱敏规则:

package main

import (
	"github.com/kyzykyky/noodlog"
)

func main() {
	// 创建自定义配置
	config := noodlog.Config{
		EnableSensitiveDataRedaction: true,
		RedactionPatterns: []string{
			`"password":\s*".*?"`,       // 密码字段
			`"token":\s*".*?"`,          // token字段
			`\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b`, // 信用卡号
			`\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b`, // 邮箱
		},
		RedactionString: "[REDACTED]",
	}
	
	// 使用自定义配置初始化日志记录器
	logger := noodlog.NewLoggerWithConfig(config)
	
	// 现在敏感数据会被自动脱敏
	sensitiveData := map[string]interface{}{
		"email":    "john.doe@example.com",
		"password": "myPassword123",
		"card":     "4111-1111-1111-1111",
	}
	
	logger.Info("Sensitive data: %v", sensitiveData)
}

JSON日志格式化

noodlog可以输出结构化的JSON日志,便于日志收集系统处理:

package main

import (
	"github.com/kyzykyky/noodlog"
)

func main() {
	// 配置JSON输出
	config := noodlog.Config{
		JSON:           true,
		JSONIndent:     "  ", // 缩进两个空格
		TimestampField: "time",
		MessageField:   "msg",
		LevelField:     "level",
	}
	
	logger := noodlog.NewLoggerWithConfig(config)
	
	// 输出JSON格式日志
	logger.WithFields(map[string]interface{}{
		"user_id": 12345,
		"action":  "login",
		"ip":      "192.168.1.1",
	}).Info("User logged in")
}

高级用法:自定义日志级别

package main

import (
	"github.com/kyzykyky/noodlog"
)

func main() {
	logger := noodlog.NewLogger()
	
	// 设置日志级别为Warn,只有Warn及以上级别的日志会被记录
	logger.SetLevel(noodlog.WarnLevel)
	
	logger.Debug("This debug message won't be logged") // 不会记录
	logger.Info("This info message won't be logged")    // 不会记录
	logger.Warn("This warning will be logged")         // 会记录
	logger.Error("This error will be logged")          // 会记录
}

性能考虑

noodlog在设计时考虑了性能因素:

  1. 只有在日志级别允许时才会处理日志
  2. 使用缓冲减少I/O操作
  3. 脱敏操作只在必要时执行

总结

noodlog为Golang开发者提供了:

  • 开箱即用的敏感数据保护
  • 结构化的JSON日志输出
  • 灵活的配置选项
  • 良好的性能表现

通过合理配置noodlog,你可以既保持详细的日志记录,又确保不会意外泄露敏感信息,这对于符合GDPR等数据保护法规要求特别重要。

更多高级用法和配置选项,请参考noodlog的官方文档和GitHub仓库。

回到顶部