log.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package log
  2. import (
  3. "github.com/v2ray/v2ray-core/common/log/internal"
  4. )
  5. type LogLevel int
  6. const (
  7. DebugLevel = LogLevel(0)
  8. InfoLevel = LogLevel(1)
  9. WarningLevel = LogLevel(2)
  10. ErrorLevel = LogLevel(3)
  11. NoneLevel = LogLevel(999)
  12. )
  13. var (
  14. streamLoggerInstance internal.LogWriter = internal.NewStdOutLogWriter()
  15. debugLogger internal.LogWriter = streamLoggerInstance
  16. infoLogger internal.LogWriter = streamLoggerInstance
  17. warningLogger internal.LogWriter = streamLoggerInstance
  18. errorLogger internal.LogWriter = streamLoggerInstance
  19. )
  20. func SetLogLevel(level LogLevel) {
  21. debugLogger = new(internal.NoOpLogWriter)
  22. if level <= DebugLevel {
  23. debugLogger = streamLoggerInstance
  24. }
  25. infoLogger = new(internal.NoOpLogWriter)
  26. if level <= InfoLevel {
  27. infoLogger = streamLoggerInstance
  28. }
  29. warningLogger = new(internal.NoOpLogWriter)
  30. if level <= WarningLevel {
  31. warningLogger = streamLoggerInstance
  32. }
  33. errorLogger = new(internal.NoOpLogWriter)
  34. if level <= ErrorLevel {
  35. errorLogger = streamLoggerInstance
  36. }
  37. if level == NoneLevel {
  38. accessLoggerInstance = new(internal.NoOpLogWriter)
  39. }
  40. }
  41. func InitErrorLogger(file string) error {
  42. logger, err := internal.NewFileLogWriter(file)
  43. if err != nil {
  44. Error("Failed to create error logger on file (", file, "): ", err)
  45. return err
  46. }
  47. streamLoggerInstance = logger
  48. return nil
  49. }
  50. // Debug outputs a debug log with given format and optional arguments.
  51. func Debug(v ...interface{}) {
  52. debugLogger.Log(&internal.ErrorLog{
  53. Prefix: "[Debug]",
  54. Values: v,
  55. })
  56. }
  57. // Info outputs an info log with given format and optional arguments.
  58. func Info(v ...interface{}) {
  59. infoLogger.Log(&internal.ErrorLog{
  60. Prefix: "[Info]",
  61. Values: v,
  62. })
  63. }
  64. // Warning outputs a warning log with given format and optional arguments.
  65. func Warning(v ...interface{}) {
  66. warningLogger.Log(&internal.ErrorLog{
  67. Prefix: "[Warning]",
  68. Values: v,
  69. })
  70. }
  71. // Error outputs an error log with given format and optional arguments.
  72. func Error(v ...interface{}) {
  73. errorLogger.Log(&internal.ErrorLog{
  74. Prefix: "[Error]",
  75. Values: v,
  76. })
  77. }
  78. func Close() {
  79. streamLoggerInstance.Close()
  80. accessLoggerInstance.Close()
  81. }