log_creator.go 1.3 KB

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