mirror of
https://github.com/fatedier/frp.git
synced 2025-07-27 07:35:07 +00:00
sshTunnelGateway refactor (#3784)
This commit is contained in:
@@ -15,40 +15,81 @@
|
||||
package xlog
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
||||
"github.com/fatedier/frp/pkg/util/log"
|
||||
)
|
||||
|
||||
type LogPrefix struct {
|
||||
// Name is the name of the prefix, it won't be displayed in log but used to identify the prefix.
|
||||
Name string
|
||||
// Value is the value of the prefix, it will be displayed in log.
|
||||
Value string
|
||||
// The prefix with higher priority will be displayed first, default is 10.
|
||||
Priority int
|
||||
}
|
||||
|
||||
// Logger is not thread safety for operations on prefix
|
||||
type Logger struct {
|
||||
prefixes []string
|
||||
prefixes []LogPrefix
|
||||
|
||||
prefixString string
|
||||
}
|
||||
|
||||
func New() *Logger {
|
||||
return &Logger{
|
||||
prefixes: make([]string, 0),
|
||||
prefixes: make([]LogPrefix, 0),
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Logger) ResetPrefixes() (old []string) {
|
||||
func (l *Logger) ResetPrefixes() (old []LogPrefix) {
|
||||
old = l.prefixes
|
||||
l.prefixes = make([]string, 0)
|
||||
l.prefixes = make([]LogPrefix, 0)
|
||||
l.prefixString = ""
|
||||
return
|
||||
}
|
||||
|
||||
func (l *Logger) AppendPrefix(prefix string) *Logger {
|
||||
l.prefixes = append(l.prefixes, prefix)
|
||||
l.prefixString += "[" + prefix + "] "
|
||||
return l.AddPrefix(LogPrefix{
|
||||
Name: prefix,
|
||||
Value: prefix,
|
||||
Priority: 10,
|
||||
})
|
||||
}
|
||||
|
||||
func (l *Logger) AddPrefix(prefix LogPrefix) *Logger {
|
||||
found := false
|
||||
if prefix.Priority <= 0 {
|
||||
prefix.Priority = 10
|
||||
}
|
||||
for _, p := range l.prefixes {
|
||||
if p.Name == prefix.Name {
|
||||
found = true
|
||||
p.Value = prefix.Value
|
||||
p.Priority = prefix.Priority
|
||||
}
|
||||
}
|
||||
if !found {
|
||||
l.prefixes = append(l.prefixes, prefix)
|
||||
}
|
||||
l.renderPrefixString()
|
||||
return l
|
||||
}
|
||||
|
||||
func (l *Logger) renderPrefixString() {
|
||||
sort.SliceStable(l.prefixes, func(i, j int) bool {
|
||||
return l.prefixes[i].Priority < l.prefixes[j].Priority
|
||||
})
|
||||
l.prefixString = ""
|
||||
for _, v := range l.prefixes {
|
||||
l.prefixString += "[" + v.Value + "] "
|
||||
}
|
||||
}
|
||||
|
||||
func (l *Logger) Spawn() *Logger {
|
||||
nl := New()
|
||||
for _, v := range l.prefixes {
|
||||
nl.AppendPrefix(v)
|
||||
}
|
||||
nl.prefixes = append(nl.prefixes, l.prefixes...)
|
||||
nl.renderPrefixString()
|
||||
return nl
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user