logger.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. // SPDX-FileCopyrightText: Copyright The Miniflux Authors. All rights reserved.
  2. // SPDX-License-Identifier: Apache-2.0
  3. package logger // import "miniflux.app/v2/internal/logger"
  4. import (
  5. "fmt"
  6. "os"
  7. "time"
  8. )
  9. var requestedLevel = InfoLevel
  10. var displayDateTime = false
  11. // LogLevel type.
  12. type LogLevel uint32
  13. const (
  14. // FatalLevel should be used in fatal situations, the app will exit.
  15. FatalLevel LogLevel = iota
  16. // ErrorLevel should be used when someone should really look at the error.
  17. ErrorLevel
  18. // InfoLevel should be used during normal operations.
  19. InfoLevel
  20. // DebugLevel should be used only during development.
  21. DebugLevel
  22. )
  23. func (level LogLevel) String() string {
  24. switch level {
  25. case DebugLevel:
  26. return "DEBUG"
  27. case InfoLevel:
  28. return "INFO"
  29. case ErrorLevel:
  30. return "ERROR"
  31. case FatalLevel:
  32. return "FATAL"
  33. default:
  34. return "UNKNOWN"
  35. }
  36. }
  37. // EnableDateTime enables date time in log messages.
  38. func EnableDateTime() {
  39. displayDateTime = true
  40. }
  41. // EnableDebug increases logging, more verbose (debug)
  42. func EnableDebug() {
  43. requestedLevel = DebugLevel
  44. formatMessage(InfoLevel, "Debug mode enabled")
  45. }
  46. // Debug sends a debug log message.
  47. func Debug(format string, v ...interface{}) {
  48. if requestedLevel >= DebugLevel {
  49. formatMessage(DebugLevel, format, v...)
  50. }
  51. }
  52. // Info sends an info log message.
  53. func Info(format string, v ...interface{}) {
  54. if requestedLevel >= InfoLevel {
  55. formatMessage(InfoLevel, format, v...)
  56. }
  57. }
  58. // Error sends an error log message.
  59. func Error(format string, v ...interface{}) {
  60. if requestedLevel >= ErrorLevel {
  61. formatMessage(ErrorLevel, format, v...)
  62. }
  63. }
  64. // Fatal sends a fatal log message and stop the execution of the program.
  65. func Fatal(format string, v ...interface{}) {
  66. if requestedLevel >= FatalLevel {
  67. formatMessage(FatalLevel, format, v...)
  68. os.Exit(1)
  69. }
  70. }
  71. func formatMessage(level LogLevel, format string, v ...interface{}) {
  72. var prefix string
  73. if displayDateTime {
  74. prefix = fmt.Sprintf("[%s] [%s] ", time.Now().Format("2006-01-02T15:04:05"), level)
  75. } else {
  76. prefix = fmt.Sprintf("[%s] ", level)
  77. }
  78. fmt.Fprintf(os.Stderr, prefix+format+"\n", v...)
  79. }