log_creator.go 1.3 KB

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