You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

logger.go 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. // Copyright 2019 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package log
  5. import "os"
  6. // Logger is the basic interface for logging
  7. type Logger interface {
  8. LevelLogger
  9. Trace(format string, v ...interface{})
  10. IsTrace() bool
  11. Debug(format string, v ...interface{})
  12. IsDebug() bool
  13. Info(format string, v ...interface{})
  14. IsInfo() bool
  15. Warn(format string, v ...interface{})
  16. IsWarn() bool
  17. Error(format string, v ...interface{})
  18. ErrorWithSkip(skip int, format string, v ...interface{})
  19. IsError() bool
  20. Critical(format string, v ...interface{})
  21. CriticalWithSkip(skip int, format string, v ...interface{})
  22. IsCritical() bool
  23. Fatal(format string, v ...interface{})
  24. FatalWithSkip(skip int, format string, v ...interface{})
  25. IsFatal() bool
  26. }
  27. // LevelLogger is the simplest logging interface
  28. type LevelLogger interface {
  29. Flush()
  30. Close()
  31. GetLevel() Level
  32. Log(skip int, level Level, format string, v ...interface{}) error
  33. }
  34. // SettableLogger is the interface of loggers which have subloggers
  35. type SettableLogger interface {
  36. SetLogger(name, provider, config string) error
  37. DelLogger(name string) (bool, error)
  38. }
  39. // StacktraceLogger is a logger that can log stacktraces
  40. type StacktraceLogger interface {
  41. GetStacktraceLevel() Level
  42. }
  43. // LevelLoggerLogger wraps a LevelLogger as a Logger
  44. type LevelLoggerLogger struct {
  45. LevelLogger
  46. }
  47. // Trace records trace log
  48. func (l *LevelLoggerLogger) Trace(format string, v ...interface{}) {
  49. l.Log(1, TRACE, format, v...)
  50. }
  51. // IsTrace returns true if the logger is TRACE
  52. func (l *LevelLoggerLogger) IsTrace() bool {
  53. return l.GetLevel() <= TRACE
  54. }
  55. // Debug records debug log
  56. func (l *LevelLoggerLogger) Debug(format string, v ...interface{}) {
  57. l.Log(1, DEBUG, format, v...)
  58. }
  59. // IsDebug returns true if the logger is DEBUG
  60. func (l *LevelLoggerLogger) IsDebug() bool {
  61. return l.GetLevel() <= DEBUG
  62. }
  63. // Info records information log
  64. func (l *LevelLoggerLogger) Info(format string, v ...interface{}) {
  65. l.Log(1, INFO, format, v...)
  66. }
  67. // IsInfo returns true if the logger is INFO
  68. func (l *LevelLoggerLogger) IsInfo() bool {
  69. return l.GetLevel() <= INFO
  70. }
  71. // Warn records warning log
  72. func (l *LevelLoggerLogger) Warn(format string, v ...interface{}) {
  73. l.Log(1, WARN, format, v...)
  74. }
  75. // IsWarn returns true if the logger is WARN
  76. func (l *LevelLoggerLogger) IsWarn() bool {
  77. return l.GetLevel() <= WARN
  78. }
  79. // Error records error log
  80. func (l *LevelLoggerLogger) Error(format string, v ...interface{}) {
  81. l.Log(1, ERROR, format, v...)
  82. }
  83. // ErrorWithSkip records error log from "skip" calls back from this function
  84. func (l *LevelLoggerLogger) ErrorWithSkip(skip int, format string, v ...interface{}) {
  85. l.Log(skip+1, ERROR, format, v...)
  86. }
  87. // IsError returns true if the logger is ERROR
  88. func (l *LevelLoggerLogger) IsError() bool {
  89. return l.GetLevel() <= ERROR
  90. }
  91. // Critical records critical log
  92. func (l *LevelLoggerLogger) Critical(format string, v ...interface{}) {
  93. l.Log(1, CRITICAL, format, v...)
  94. }
  95. // CriticalWithSkip records critical log from "skip" calls back from this function
  96. func (l *LevelLoggerLogger) CriticalWithSkip(skip int, format string, v ...interface{}) {
  97. l.Log(skip+1, CRITICAL, format, v...)
  98. }
  99. // IsCritical returns true if the logger is CRITICAL
  100. func (l *LevelLoggerLogger) IsCritical() bool {
  101. return l.GetLevel() <= CRITICAL
  102. }
  103. // Fatal records fatal log and exit the process
  104. func (l *LevelLoggerLogger) Fatal(format string, v ...interface{}) {
  105. l.Log(1, FATAL, format, v...)
  106. l.Close()
  107. os.Exit(1)
  108. }
  109. // FatalWithSkip records fatal log from "skip" calls back from this function and exits the process
  110. func (l *LevelLoggerLogger) FatalWithSkip(skip int, format string, v ...interface{}) {
  111. l.Log(skip+1, FATAL, format, v...)
  112. l.Close()
  113. os.Exit(1)
  114. }
  115. // IsFatal returns true if the logger is FATAL
  116. func (l *LevelLoggerLogger) IsFatal() bool {
  117. return l.GetLevel() <= FATAL
  118. }