You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤错误日志中的TLS握手错误信息?

过滤Go HTTP服务器的TLS握手错误日志

方法一:自定义错误日志记录器(代码层面)

Go的http.Server支持替换默认错误日志记录器,你可以通过自定义逻辑过滤掉特定的TLS握手错误。核心思路是检查日志内容中的关键词,跳过无需关注的条目。

示例代码:

import (
    "fmt"
    "log"
    "os"
    "strings"
    "net/http"
)

// 自定义过滤日志器
type filteredErrorLogger struct {
    inner *log.Logger
}

func (l *filteredErrorLogger) Println(v ...interface{}) {
    // 将日志条目转为字符串
    logMsg := strings.Join(strings.Fields(fmt.Sprint(v...)), " ")
    
    // 定义需要过滤的错误关键词
    skipKeywords := []string{
        "connection reset by peer",
        "EOF",
        "client requested unsupported application protocols",
    }
    
    // 检查是否包含需要过滤的关键词,是则跳过
    for _, kw := range skipKeywords {
        if strings.Contains(logMsg, kw) {
            return
        }
    }
    
    // 非过滤日志正常输出
    l.inner.Println(v...)
}

func main() {
    // 初始化自定义日志器
    logger := &filteredErrorLogger{
        inner: log.New(os.Stderr, "", log.LstdFlags),
    }
    
    // 创建HTTP服务器并绑定自定义错误日志
    server := &http.Server{
        Addr:    ":443",
        Handler: yourHandler,
        ErrorLog: logger,
        // 配置你的TLSConfig...
    }
    
    // 启动服务器
    if err := server.ListenAndServeTLS("cert.pem", "key.pem"); err != nil && err != http.ErrServerClosed {
        log.Fatalf("服务器启动失败: %v", err)
    }
}

方法二:运维层面过滤(命令行工具)

如果不想修改代码,可在日志输出或收集阶段用命令行工具过滤。比如用grep反向匹配需要排除的关键词:

实时查看过滤后的日志

tail -f your-app-error.log | grep -v -E "(connection reset by peer|EOF|client requested unsupported application protocols)"

将过滤后的日志写入文件

./your-app 2>&1 | grep -v -E "(connection reset by peer|EOF|client requested unsupported application protocols)" >> filtered-app.log

注意事项

  • 代码层面过滤更灵活,也可以通过解析错误类型(如net.OpError)来判断,但字符串匹配对这类场景已经足够简单有效。
  • 命令行过滤适合临时调试或已部署服务的快速日志调整。

内容的提问来源于stack exchange,提问作者clarkk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 01:15:39