log.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. package log
  2. import (
  3. "flag"
  4. "fmt"
  5. "io"
  6. _log "log"
  7. "os"
  8. "strings"
  9. "git.giaever.org/joachimmg/go-log.git/config"
  10. "git.giaever.org/joachimmg/go-log.git/errors"
  11. )
  12. func log_file(p config.LogPrefix) *os.File {
  13. os.MkdirAll(config.LOG_DIR.String(), 0777)
  14. f, err := os.OpenFile(
  15. fmt.Sprintf("%s%c%s%s.log", config.LOG_DIR, os.PathSeparator, strings.ToLower(string(p)), config.FILE_EXTRA),
  16. config.FILE_MASK,
  17. config.FILE_PERM,
  18. )
  19. if err != nil {
  20. _log.Fatal(err.Error())
  21. return nil
  22. }
  23. return f
  24. }
  25. func log_new(l config.LogLevel, h config.LogHandle, p config.LogPrefix) *_log.Logger {
  26. if (config.LOG_LEVEL_FILE&l) == config.LOG_LEVEL_FILE && (config.LOG_LEVEL_OUTPUT&l) == config.LOG_LEVEL_OUTPUT {
  27. f := log_file(p)
  28. return _log.New(
  29. io.MultiWriter(f, h),
  30. fmt.Sprintf("%s ", p),
  31. config.LOG_FORMAT,
  32. )
  33. }
  34. if (config.LOG_LEVEL_FILE & l) == config.LOG_LEVEL_FILE {
  35. f := log_file(p)
  36. return _log.New(
  37. f, fmt.Sprintf("%s ", p),
  38. config.LOG_FORMAT,
  39. )
  40. }
  41. if (config.LOG_LEVEL_OUTPUT & l) == config.LOG_LEVEL_OUTPUT {
  42. return _log.New(
  43. h, fmt.Sprintf("%s ", p),
  44. config.LOG_FORMAT,
  45. )
  46. }
  47. return _log.New(
  48. config.DISCARD_HANDLE, fmt.Sprintf("%s ", p),
  49. config.LOG_FORMAT,
  50. )
  51. }
  52. func init() {
  53. flag.Var(&config.LOG_LEVEL_OUTPUT, "llo", "Minimum log level that will be written to stdout.")
  54. flag.Var(&config.LOG_LEVEL_FILE, "llf", "Minimum log level that will be written to file")
  55. flag.Var(&config.LOG_DIR, "ldir", "Directory to log to")
  56. }
  57. func log(t config.LogLevel) *_log.Logger {
  58. var l *_log.Logger
  59. switch t {
  60. case config.TRACE:
  61. if config.Trace == nil {
  62. config.Trace = log_new(t, config.HANDLE_TRACE, config.PREFIX_TRACE)
  63. }
  64. l = config.Trace
  65. case config.INFO:
  66. if config.Info == nil {
  67. config.Info = log_new(t, config.HANDLE_INFO, config.PREFIX_INFO)
  68. }
  69. l = config.Info
  70. case config.WARNING:
  71. if config.Warning == nil {
  72. config.Warning = log_new(t, config.HANDLE_WARNING, config.PREFIX_WARNING)
  73. }
  74. l = config.Warning
  75. case config.ERROR:
  76. if config.Error == nil {
  77. config.Error = log_new(t, config.HANDLE_ERROR, config.PREFIX_ERROR)
  78. }
  79. l = config.Error
  80. case config.PANIC:
  81. if config.Panic == nil {
  82. config.Panic = log_new(t, config.HANDLE_ERROR, config.PREFIX_PANIC)
  83. }
  84. l = config.Panic
  85. }
  86. if l == nil {
  87. _log.Panic(errors.UNKNOWN_LOGGER.Error())
  88. }
  89. return l
  90. }
  91. func LLO() *config.LogLevel {
  92. return &config.LOG_LEVEL_OUTPUT
  93. }
  94. func LLF() *config.LogLevel {
  95. return &config.LOG_LEVEL_FILE
  96. }
  97. func Trace(m string) {
  98. log(config.TRACE).Print(m)
  99. }
  100. func Tracef(f string, v ...interface{}) {
  101. log(config.TRACE).Printf(f, v...)
  102. }
  103. func Traceln(v ...interface{}) {
  104. log(config.TRACE).Println(v...)
  105. }
  106. func Info(m string) {
  107. log(config.INFO).Print(m)
  108. }
  109. func Infof(f string, v ...interface{}) {
  110. log(config.INFO).Printf(f, v...)
  111. }
  112. func Infoln(v ...interface{}) {
  113. log(config.INFO).Println(v...)
  114. }
  115. func Warning(m string) {
  116. log(config.WARNING).Print(m)
  117. }
  118. func Warningf(f string, v ...interface{}) {
  119. log(config.WARNING).Printf(f, v...)
  120. }
  121. func Warningln(v ...interface{}) {
  122. log(config.WARNING).Println(v...)
  123. }
  124. func Error(m string) {
  125. log(config.ERROR).Fatal(m)
  126. }
  127. func Errorf(f string, v ...interface{}) {
  128. log(config.ERROR).Fatalf(f, v...)
  129. }
  130. func Errorln(v ...interface{}) {
  131. log(config.ERROR).Fatalln(v...)
  132. }
  133. func Panic(m string) {
  134. log(config.PANIC).Panic(m)
  135. }
  136. func Panicf(f string, v ...interface{}) {
  137. log(config.PANIC).Panicf(f, v...)
  138. }
  139. func Panicln(v ...interface{}) {
  140. log(config.PANIC).Panicln(v...)
  141. }