log_creator.go 1.3 KB

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