mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-12-21 09:36:34 -05:00
access log add detour tag
This commit is contained in:
parent
85d2c69241
commit
fa926a1d1d
@ -14,6 +14,7 @@ import (
|
||||
"v2ray.com/core/common"
|
||||
"v2ray.com/core/common/buf"
|
||||
"v2ray.com/core/common/net"
|
||||
"v2ray.com/core/common/log"
|
||||
"v2ray.com/core/common/protocol"
|
||||
"v2ray.com/core/common/session"
|
||||
"v2ray.com/core/features/outbound"
|
||||
@ -281,5 +282,11 @@ func (d *DefaultDispatcher) routedDispatch(ctx context.Context, link *transport.
|
||||
return
|
||||
}
|
||||
|
||||
accessMessage := log.AccessMessageFromContext(ctx)
|
||||
if accessMessage != nil {
|
||||
accessMessage.Detour = "[" + handler.Tag() + "]"
|
||||
log.Record(accessMessage)
|
||||
}
|
||||
|
||||
handler.Dispatch(ctx, link)
|
||||
}
|
||||
|
@ -1,11 +1,18 @@
|
||||
package log
|
||||
|
||||
import (
|
||||
"context"
|
||||
"strings"
|
||||
|
||||
"v2ray.com/core/common/serial"
|
||||
)
|
||||
|
||||
type logKey int
|
||||
|
||||
const (
|
||||
accessMessageKey logKey = iota
|
||||
)
|
||||
|
||||
type AccessStatus string
|
||||
|
||||
const (
|
||||
@ -19,6 +26,7 @@ type AccessMessage struct {
|
||||
Status AccessStatus
|
||||
Reason interface{}
|
||||
Email string
|
||||
Detour interface{}
|
||||
}
|
||||
|
||||
func (m *AccessMessage) String() string {
|
||||
@ -29,6 +37,8 @@ func (m *AccessMessage) String() string {
|
||||
builder.WriteByte(' ')
|
||||
builder.WriteString(serial.ToString(m.To))
|
||||
builder.WriteByte(' ')
|
||||
builder.WriteString(serial.ToString(m.Detour))
|
||||
builder.WriteByte(' ')
|
||||
builder.WriteString(serial.ToString(m.Reason))
|
||||
|
||||
if len(m.Email) > 0 {
|
||||
@ -38,3 +48,14 @@ func (m *AccessMessage) String() string {
|
||||
}
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
func ContextWithAccessMessage(ctx context.Context, accessMessage *AccessMessage) context.Context {
|
||||
return context.WithValue(ctx, accessMessageKey, accessMessage)
|
||||
}
|
||||
|
||||
func AccessMessageFromContext(ctx context.Context) *AccessMessage {
|
||||
if accessMessage, ok := ctx.Value(accessMessageKey).(*AccessMessage); ok {
|
||||
return accessMessage
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ func (w *ServerWorker) handleStatusNew(ctx context.Context, meta *FrameMetadata,
|
||||
msg.From = inbound.Source
|
||||
msg.Email = inbound.User.Email
|
||||
}
|
||||
log.Record(msg)
|
||||
ctx = log.ContextWithAccessMessage(ctx, msg)
|
||||
}
|
||||
link, err := w.dispatcher.Dispatch(ctx, meta.Target)
|
||||
if err != nil {
|
||||
|
@ -131,10 +131,11 @@ Start:
|
||||
if err != nil {
|
||||
return newError("malformed proxy host: ", host).AtWarning().Base(err)
|
||||
}
|
||||
log.Record(&log.AccessMessage{
|
||||
ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{
|
||||
From: conn.RemoteAddr(),
|
||||
To: request.URL,
|
||||
Status: log.AccessAccepted,
|
||||
Reason: "",
|
||||
})
|
||||
|
||||
if strings.EqualFold(request.Method, "CONNECT") {
|
||||
|
@ -134,7 +134,7 @@ func (s *Server) handlerUDPPayload(ctx context.Context, conn internet.Connection
|
||||
|
||||
dest := request.Destination()
|
||||
if inbound.Source.IsValid() {
|
||||
log.Record(&log.AccessMessage{
|
||||
ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{
|
||||
From: inbound.Source,
|
||||
To: dest,
|
||||
Status: log.AccessAccepted,
|
||||
@ -176,7 +176,7 @@ func (s *Server) handleConnection(ctx context.Context, conn internet.Connection,
|
||||
inbound.User = s.user
|
||||
|
||||
dest := request.Destination()
|
||||
log.Record(&log.AccessMessage{
|
||||
ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{
|
||||
From: conn.RemoteAddr(),
|
||||
To: dest,
|
||||
Status: log.AccessAccepted,
|
||||
|
@ -117,7 +117,7 @@ func (s *Server) processTCP(ctx context.Context, conn internet.Connection, dispa
|
||||
dest := request.Destination()
|
||||
newError("TCP Connect request to ", dest).WriteToLog(session.ExportIDToError(ctx))
|
||||
if inbound != nil && inbound.Source.IsValid() {
|
||||
log.Record(&log.AccessMessage{
|
||||
ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{
|
||||
From: inbound.Source,
|
||||
To: dest,
|
||||
Status: log.AccessAccepted,
|
||||
@ -229,7 +229,7 @@ func (s *Server) handleUDPPayload(ctx context.Context, conn internet.Connection,
|
||||
|
||||
newError("send packet to ", request.Destination(), " with ", payload.Len(), " bytes").AtDebug().WriteToLog(session.ExportIDToError(ctx))
|
||||
if inbound := session.InboundFromContext(ctx); inbound != nil && inbound.Source.IsValid() {
|
||||
log.Record(&log.AccessMessage{
|
||||
ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{
|
||||
From: inbound.Source,
|
||||
To: request.Destination(),
|
||||
Status: log.AccessAccepted,
|
||||
|
@ -250,7 +250,7 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection i
|
||||
}
|
||||
|
||||
if request.Command != protocol.RequestCommandMux {
|
||||
log.Record(&log.AccessMessage{
|
||||
ctx = log.ContextWithAccessMessage(ctx, &log.AccessMessage{
|
||||
From: connection.RemoteAddr(),
|
||||
To: request.Destination(),
|
||||
Status: log.AccessAccepted,
|
||||
|
Loading…
Reference in New Issue
Block a user