logger.go 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package main
  2. import (
  3. "fmt"
  4. "io"
  5. "os"
  6. "strings"
  7. "time"
  8. "github.com/DeRuina/timberjack"
  9. "github.com/rs/zerolog"
  10. )
  11. var (
  12. rotator *timberjack.Logger
  13. log *zerolog.Logger
  14. )
  15. func setupLogger() {
  16. zerolog.TimeFieldFormat = time.RFC3339
  17. // Handle logfile
  18. var writer io.Writer
  19. if *logFile == "" {
  20. writer = os.Stderr
  21. } else {
  22. rotator = &timberjack.Logger{
  23. Filename: *logFile,
  24. MaxSize: 10, // megabytes before rotation
  25. MaxBackups: 3,
  26. MaxAge: 30, // days
  27. Compress: true,
  28. BackupTimeFormat: "20060102150405",
  29. }
  30. writer = rotator
  31. }
  32. // Handle log_format
  33. switch *logFormat {
  34. case "json":
  35. // zerolog default is JSON
  36. case "plain":
  37. writer = zerolog.ConsoleWriter{
  38. Out: writer,
  39. NoColor: true,
  40. TimeFormat: "",
  41. FormatTimestamp: func(i interface{}) string {
  42. return "" // avoid default time
  43. },
  44. }
  45. case "", "default":
  46. writer = zerolog.ConsoleWriter{
  47. Out: writer,
  48. NoColor: true,
  49. TimeFormat: time.RFC3339,
  50. }
  51. case "pretty":
  52. writer = zerolog.ConsoleWriter{
  53. Out: writer,
  54. TimeFormat: time.RFC3339Nano,
  55. }
  56. default:
  57. fmt.Fprintf(os.Stderr, "Invalid log_format: %s\n", *logFormat)
  58. os.Exit(1)
  59. }
  60. l := zerolog.New(writer).With().Timestamp().Logger()
  61. log = &l
  62. // Handle log_level
  63. level, err := zerolog.ParseLevel(strings.ToLower(*logLevel))
  64. if err != nil {
  65. level = zerolog.InfoLevel
  66. log.Warn().Str("given_level", *logLevel).
  67. Msg("could not parse log level, defaulting to 'info'")
  68. }
  69. zerolog.SetGlobalLevel(level)
  70. }
  71. // Call this on shutdown if you want to close the rotator and stop timers cleanly
  72. func closeLogger() {
  73. if rotator != nil {
  74. rotator.Close()
  75. }
  76. }