configuration.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package logger
  2. import (
  3. "path/filepath"
  4. )
  5. var defaultConfig = createDefaultConfig()
  6. // Logging configuration
  7. type Config struct {
  8. ConsoleConfig *ConsoleConfig // If nil, the logger will not log into the console
  9. FileConfig *FileConfig // If nil, the logger will not use an individual log file
  10. RollingConfig *RollingConfig // If nil, the logger will not use a rolling log
  11. MinLevel string // debug | info | error | fatal
  12. }
  13. type ConsoleConfig struct {
  14. noColor bool
  15. }
  16. type FileConfig struct {
  17. Dirname string
  18. Filename string
  19. }
  20. func (fc *FileConfig) Fullpath() string {
  21. return filepath.Join(fc.Dirname, fc.Filename)
  22. }
  23. type RollingConfig struct {
  24. Dirname string
  25. Filename string
  26. maxSize int // megabytes
  27. maxBackups int // files
  28. maxAge int // days
  29. }
  30. func createDefaultConfig() Config {
  31. const minLevel = "info"
  32. const RollingMaxSize = 1 // Mb
  33. const RollingMaxBackups = 5 // files
  34. const RollingMaxAge = 0 // Keep forever
  35. const defaultLogFilename = "cloudflared.log"
  36. return Config{
  37. ConsoleConfig: &ConsoleConfig{
  38. noColor: false,
  39. },
  40. FileConfig: &FileConfig{
  41. Dirname: "",
  42. Filename: defaultLogFilename,
  43. },
  44. RollingConfig: &RollingConfig{
  45. Dirname: "",
  46. Filename: defaultLogFilename,
  47. maxSize: RollingMaxSize,
  48. maxBackups: RollingMaxBackups,
  49. maxAge: RollingMaxAge,
  50. },
  51. MinLevel: minLevel,
  52. }
  53. }
  54. func CreateConfig(
  55. minLevel string,
  56. disableTerminal bool,
  57. rollingLogPath, nonRollingLogFilePath string,
  58. ) *Config {
  59. var console *ConsoleConfig
  60. if !disableTerminal {
  61. console = createConsoleConfig()
  62. }
  63. var file *FileConfig
  64. var rolling *RollingConfig
  65. if rollingLogPath != "" {
  66. rolling = createRollingConfig(rollingLogPath)
  67. } else if nonRollingLogFilePath != "" {
  68. file = createFileConfig(nonRollingLogFilePath)
  69. }
  70. if minLevel == "" {
  71. minLevel = defaultConfig.MinLevel
  72. }
  73. return &Config{
  74. ConsoleConfig: console,
  75. FileConfig: file,
  76. RollingConfig: rolling,
  77. MinLevel: minLevel,
  78. }
  79. }
  80. func createConsoleConfig() *ConsoleConfig {
  81. return &ConsoleConfig{
  82. noColor: false,
  83. }
  84. }
  85. func createFileConfig(fullpath string) *FileConfig {
  86. if fullpath == "" {
  87. return defaultConfig.FileConfig
  88. }
  89. dirname, filename := filepath.Split(fullpath)
  90. return &FileConfig{
  91. Dirname: dirname,
  92. Filename: filename,
  93. }
  94. }
  95. func createRollingConfig(directory string) *RollingConfig {
  96. if directory == "" {
  97. directory = defaultConfig.RollingConfig.Dirname
  98. }
  99. return &RollingConfig{
  100. Dirname: directory,
  101. Filename: defaultConfig.RollingConfig.Filename,
  102. maxSize: defaultConfig.RollingConfig.maxSize,
  103. maxBackups: defaultConfig.RollingConfig.maxBackups,
  104. maxAge: defaultConfig.RollingConfig.maxAge,
  105. }
  106. }