mirror of
https://github.com/wavetermdev/waveterm.git
synced 2025-01-02 18:39:05 +01:00
78 lines
1.9 KiB
Go
78 lines
1.9 KiB
Go
// Copyright 2024, Command Line Inc.
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
// implements distributed logging for waveshell processes
|
|
package wlog
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
)
|
|
|
|
// wlog will send logs back to the controlling wavesrv process
|
|
// note that these logs end up on your local machine where the main Wave Terminal process is running
|
|
// wlog has no ability to send logs to a cloud service or Command Line Inc servers
|
|
|
|
// this code is written a bit strange (with globals getting set from other packages)
|
|
// because we want no dependencies so any package (including base) can use wlog
|
|
|
|
// this should match base.ProcessType (set by main)
|
|
var GlobalSubsystem string
|
|
|
|
// if not set, Logf is a no-op. will be set by main to hook up to
|
|
// the main packet.PacketSender
|
|
var LogConsumer func(LogEntry)
|
|
|
|
type LogEntry struct {
|
|
LogLine string `json:"logline"`
|
|
ReqId string `json:"reqid"`
|
|
SubSystem string `json:"subsystem"`
|
|
}
|
|
|
|
func LogLogEntry(entry LogEntry) {
|
|
if LogConsumer == nil {
|
|
return
|
|
}
|
|
LogConsumer(entry)
|
|
}
|
|
|
|
// log with a request id (if related to an rpc request)
|
|
func LogfRpc(reqId string, format string, args ...interface{}) {
|
|
if LogConsumer == nil {
|
|
return
|
|
}
|
|
logEntry := LogEntry{
|
|
LogLine: fmt.Sprintf(format, args...),
|
|
ReqId: reqId,
|
|
SubSystem: GlobalSubsystem,
|
|
}
|
|
LogConsumer(logEntry)
|
|
}
|
|
|
|
func LogfSS(subsystem string, format string, args ...interface{}) {
|
|
if LogConsumer == nil {
|
|
return
|
|
}
|
|
logEntry := LogEntry{
|
|
LogLine: fmt.Sprintf(format, args...),
|
|
ReqId: "",
|
|
SubSystem: subsystem,
|
|
}
|
|
LogConsumer(logEntry)
|
|
}
|
|
|
|
func Logf(format string, args ...interface{}) {
|
|
LogfSS(GlobalSubsystem, format, args...)
|
|
}
|
|
|
|
func LogWithLogger(entry LogEntry) {
|
|
if entry.SubSystem == "" {
|
|
entry.SubSystem = "unknown"
|
|
}
|
|
if entry.ReqId != "" {
|
|
log.Printf("[%s] reqid=%s %s", entry.SubSystem, entry.ReqId, entry.LogLine)
|
|
} else {
|
|
log.Printf("[%s] %s", entry.SubSystem, entry.LogLine)
|
|
}
|
|
}
|