| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 
							- package log
 
- import (
 
- 	"context"
 
- 	"io"
 
- 	"os"
 
- 	"time"
 
- 	"github.com/sagernet/sing-box/option"
 
- 	E "github.com/sagernet/sing/common/exceptions"
 
- )
 
- type Options struct {
 
- 	Context        context.Context
 
- 	Options        option.LogOptions
 
- 	Observable     bool
 
- 	DefaultWriter  io.Writer
 
- 	BaseTime       time.Time
 
- 	PlatformWriter PlatformWriter
 
- }
 
- func New(options Options) (Factory, error) {
 
- 	logOptions := options.Options
 
- 	if logOptions.Disabled {
 
- 		return NewNOPFactory(), nil
 
- 	}
 
- 	var logWriter io.Writer
 
- 	var logFilePath string
 
- 	switch logOptions.Output {
 
- 	case "":
 
- 		logWriter = options.DefaultWriter
 
- 		if logWriter == nil {
 
- 			logWriter = os.Stderr
 
- 		}
 
- 	case "stderr":
 
- 		logWriter = os.Stderr
 
- 	case "stdout":
 
- 		logWriter = os.Stdout
 
- 	default:
 
- 		logFilePath = logOptions.Output
 
- 	}
 
- 	logFormatter := Formatter{
 
- 		BaseTime:         options.BaseTime,
 
- 		DisableColors:    logOptions.DisableColor || logFilePath != "",
 
- 		DisableTimestamp: !logOptions.Timestamp && logFilePath != "",
 
- 		FullTimestamp:    logOptions.Timestamp,
 
- 		TimestampFormat:  "-0700 2006-01-02 15:04:05",
 
- 	}
 
- 	factory := NewDefaultFactory(
 
- 		options.Context,
 
- 		logFormatter,
 
- 		logWriter,
 
- 		logFilePath,
 
- 		options.PlatformWriter,
 
- 		options.Observable,
 
- 	)
 
- 	if logOptions.Level != "" {
 
- 		logLevel, err := ParseLevel(logOptions.Level)
 
- 		if err != nil {
 
- 			return nil, E.Cause(err, "parse log level")
 
- 		}
 
- 		factory.SetLevel(logLevel)
 
- 	} else {
 
- 		factory.SetLevel(LevelTrace)
 
- 	}
 
- 	return factory, nil
 
- }
 
 
  |