log_creator.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // +build !confonly
  2. package log
  3. import (
  4. "github.com/xtls/xray-core/common"
  5. "github.com/xtls/xray-core/common/log"
  6. )
  7. type HandlerCreatorOptions struct {
  8. Path string
  9. }
  10. type HandlerCreator func(LogType, HandlerCreatorOptions) (log.Handler, error)
  11. var (
  12. handlerCreatorMap = make(map[LogType]HandlerCreator)
  13. )
  14. func RegisterHandlerCreator(logType LogType, f HandlerCreator) error {
  15. if f == nil {
  16. return newError("nil HandlerCreator")
  17. }
  18. handlerCreatorMap[logType] = f
  19. return nil
  20. }
  21. func createHandler(logType LogType, options HandlerCreatorOptions) (log.Handler, error) {
  22. creator, found := handlerCreatorMap[logType]
  23. if !found {
  24. return nil, newError("unable to create log handler for ", logType)
  25. }
  26. return creator(logType, options)
  27. }
  28. func init() {
  29. common.Must(RegisterHandlerCreator(LogType_Console, func(lt LogType, options HandlerCreatorOptions) (log.Handler, error) {
  30. return log.NewLogger(log.CreateStdoutLogWriter()), nil
  31. }))
  32. common.Must(RegisterHandlerCreator(LogType_File, func(lt LogType, options HandlerCreatorOptions) (log.Handler, error) {
  33. creator, err := log.CreateFileLogWriter(options.Path)
  34. if err != nil {
  35. return nil, err
  36. }
  37. return log.NewLogger(creator), nil
  38. }))
  39. common.Must(RegisterHandlerCreator(LogType_None, func(lt LogType, options HandlerCreatorOptions) (log.Handler, error) {
  40. return nil, nil
  41. }))
  42. }