mirror of
				https://gitee.com/dromara/mayfly-go
				synced 2025-11-04 16:30:25 +08:00 
			
		
		
		
	
		
			
	
	
		
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| 
								 | 
							
								package logx
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								import (
							 | 
						|||
| 
								 | 
							
									"context"
							 | 
						|||
| 
								 | 
							
									"fmt"
							 | 
						|||
| 
								 | 
							
									"log"
							 | 
						|||
| 
								 | 
							
									"log/slog"
							 | 
						|||
| 
								 | 
							
								)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								type CustomeTextHandlerOptions struct {
							 | 
						|||
| 
								 | 
							
									SlogOpts slog.HandlerOptions
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								type CustomeTextHandler struct {
							 | 
						|||
| 
								 | 
							
									slog.Handler
							 | 
						|||
| 
								 | 
							
									l *log.Logger
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func (h *CustomeTextHandler) Handle(ctx context.Context, r slog.Record) error {
							 | 
						|||
| 
								 | 
							
									level := r.Level.String()
							 | 
						|||
| 
								 | 
							
									timeStr := r.Time.Format("2006-01-02 15:04:05.000")
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									attrsStr := ""
							 | 
						|||
| 
								 | 
							
									r.Attrs(func(a slog.Attr) bool {
							 | 
						|||
| 
								 | 
							
										// 如果是source,则忽略key,简洁些
							 | 
						|||
| 
								 | 
							
										if a.Key == slog.SourceKey {
							 | 
						|||
| 
								 | 
							
											attrsStr += fmt.Sprintf("[%s]", a.Value.Any())
							 | 
						|||
| 
								 | 
							
											return true
							 | 
						|||
| 
								 | 
							
										}
							 | 
						|||
| 
								 | 
							
										attrsStr += fmt.Sprintf("[%s=%v]", a.Key, a.Value.Any())
							 | 
						|||
| 
								 | 
							
										return true
							 | 
						|||
| 
								 | 
							
									})
							 | 
						|||
| 
								 | 
							
									if attrsStr != "" {
							 | 
						|||
| 
								 | 
							
										attrsStr = " " + attrsStr
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									// 格式为:time [level] [key=value][key2=value2] : message
							 | 
						|||
| 
								 | 
							
									h.l.Printf("%s [%s]%s : %s", timeStr, level, attrsStr, r.Message)
							 | 
						|||
| 
								 | 
							
									return nil
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								func NewTextHandler(config *Config) *CustomeTextHandler {
							 | 
						|||
| 
								 | 
							
									opts := CustomeTextHandlerOptions{
							 | 
						|||
| 
								 | 
							
										SlogOpts: slog.HandlerOptions{
							 | 
						|||
| 
								 | 
							
											Level:     config.GetLevel(),
							 | 
						|||
| 
								 | 
							
											AddSource: false, // 统一由添加公共commonAttrs时判断添加
							 | 
						|||
| 
								 | 
							
										}}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
									out := config.GetLogOut()
							 | 
						|||
| 
								 | 
							
									return &CustomeTextHandler{
							 | 
						|||
| 
								 | 
							
										Handler: slog.NewTextHandler(out, &opts.SlogOpts),
							 | 
						|||
| 
								 | 
							
										l:       log.New(out, "", 0),
							 | 
						|||
| 
								 | 
							
									}
							 | 
						|||
| 
								 | 
							
								}
							 |