xSky 实验室关注高性能计算,分布式系统/存储,大数据/机器学习/WebRTC
目录
  • 首页
  • 技术相关
  • 原创作品
  • 人工智能/机器学习
  • 系统与架构
  • 数据库/数据分析
  • 分布式系统/存储
  • 服务端开发
  • WEBRTC研究
  • 开发调试
  • 网络与安全
  • 常用工具
  • 杂七杂八

zap  发送日志到 websocket

2024-07-03 16:32:14

zap  发送日志到 websocket

 

 

package wslog

import (
	"log"
	"os"
	"time"

	"github.com/gorilla/websocket"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

var Logger *zap.Logger

type WebSocketLogSyncher struct {
	conn    *websocket.Conn
	Address string
}

func (wsSync *WebSocketLogSyncher) Write(p []byte) (n int, err error) {
	if wsSync.conn != nil {
		err = wsSync.conn.WriteMessage(websocket.TextMessage, p)
	}
	if err == nil {
		n = len(p)
	}
	return
}

func (wsSync *WebSocketLogSyncher) Sync() error {
	// nothing to sync for websocket
	return nil
}

func (wsSync *WebSocketLogSyncher) SetWSConn(conn *websocket.Conn) {
	wsSync.conn = conn
}

func (wsSync *WebSocketLogSyncher) Connect() bool {
	//建立 websocket 连接
	if wsSync.conn == nil {
		conn, _, err := websocket.DefaultDialer.Dial(wsSync.Address, nil)
		if err != nil {
			log.Println("WebSocket connection failed: ", err)
			return false
		}
		wsSync.conn = conn
	}

	log.Println("WebSocket connection success")

	return true
}

func (wsSync *WebSocketLogSyncher) OnTimer() {

	go func() {
		for {
			if wsSync.conn != nil {
				_, _, err := wsSync.conn.ReadMessage()
				if err != nil {
					log.Println("WebSocket connection closed")
					wsSync.conn.Close()
					wsSync.conn = nil
				} else {
					//log.Println("WebSocket message type: ", ty, " message: ", string(message))
				}
			} else {
				time.Sleep(1 * time.Second)
				log.Println("WebSocket connection is nil")
				wsSync.Connect()
			}
		}
	}()
}

func Init(addr string) {
	var err error
	Logger, err = zap.NewDevelopment()
	if err != nil {
		log.Print("Cannot initialize logging")
	}
	WSLogSync := &WebSocketLogSyncher{}
	WSLogSync.Address = addr

	bret := WSLogSync.Connect()
	if bret {
		Logger.Info("WebSocket connection success ", zap.String("address", WSLogSync.Address))
	} else {
		Logger.Error("WebSocket connection failed ", zap.String("address", WSLogSync.Address))
	}
	WSLogSync.OnTimer()

	Logger = zap.New(zapcore.NewCore(zapcore.NewJSONEncoder(zapcore.EncoderConfig{
		TimeKey:        "ts",
		LevelKey:       "level",
		NameKey:        "logger",
		CallerKey:      "caller",
		MessageKey:     "msg",
		StacktraceKey:  "stacktrace",
		EncodeLevel:    zapcore.LowercaseLevelEncoder,
		EncodeTime:     zapcore.EpochTimeEncoder,
		EncodeDuration: zapcore.SecondsDurationEncoder,
	}), zapcore.NewMultiWriteSyncer(os.Stdout, WSLogSync), zap.NewAtomicLevel()))
	Logger.Info("Logger initialized")

}

 

package main

import (
	"time"
	"wstest/wslog"
)

var addr = "ws://localhost:8080/echo"

func main() {

	wslog.Init(addr)
	Logger := wslog.Logger

	Logger.Info("logger init success")

	for {
		time.Sleep(1 * time.Second)
		Logger.Info("logger info")
		Logger.Warn("logger warn")
		Logger.Error("logger error")
	}
}
 

 

By:xSky | 技术相关 |

  • 分类目录

    • 技术相关 (34)
    • 原创作品 (13)
    • 人工智能/机器学习 (6)
    • 系统与架构 (9)
    • 数据库/数据分析 (11)
    • 分布式系统/存储 (4)
    • 服务端开发 (7)
    • WEBRTC研究 (7)
    • 开发调试 (7)
    • 网络与安全 (9)
    • 常用工具 (9)
    • 杂七杂八 (6)
  • 最新文章

    • WSL从C盘迁移到其他盘区
    • 赵何娟:中国AI追随之路的五大误区,我们至少落后十年
    • zap  发送日志到 websocket
    • QUIC(隐藏的)超能力
    • MYSQL 生成日期/时间序列总结
    • Linux bash终端设置代理(proxy)访问
    • centos 下 yum安装python3
    • 使用SQL查询Milvus 向量数据库
    • 浅谈 MySQL 新的身份验证插件 caching_sha2_password
    • Milvus v2.2.1 开源向量搜索引擎使用教程
    • 部署了一个SRS的demo
    • Dockerfile 详解
    • Docker常用命令
    • Tus文件上传协议
    • 编译运行Milvus
    • MinIO 快速入门
    • ESP32
    • Prometheus监控报警系统搭建
    • go语言JSON字典模拟
    • go语言的sql解析器
    • Grafana配置数据源,自定义查询语法
    • TDengine + Telegraf + Grafana
    • gRPC-Gateway 返回JSON数据int64类型被转为string类型问题
    • LLAMA模型试玩
    • 语音识别的一些开源项目整理
    • 使用MYSQL8进行统计分析
    • 记录FFmpeg抽帧、合流、转码、加水印等操作
    • 移动网络弱网处理研究
    • 翻译:使用 Semgrep 进行热点代码评审
    • 共享内存并发路线图
  • 链接

    • xSky的Blog
    • 我的Github
    • 实时监控图表
    • 预印本
    • xRedis 在线文档
    • xSkyProxy
    • xChart 数据在线测试
    • 我的电子书
    • xChart 数据可视化系统
    • 树莓派技术圈
    • WebRTC开发者社区
  • 开源项目

    • xReis C++的redis客户端库
    • xBlog-C++ 博客程序
    • xSkyProxy-新型MySQL代理网关
    • 数据可视化平台- xChart
    • xhttpcache 高速数据缓存服务
    • xMonitor-图形监测工具
    • 网址收集

Powered By xBlog

Copyright 2010~2024 0xsky.com All Rights Reserved.