logger.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286
  1. package logger
  2. // "log"
  3. const (
  4. //go-logger version
  5. _VER string = "1.0.3"
  6. )
  7. type LEVEL int32
  8. type UNIT int64
  9. type _ROLLTYPE int //dailyRolling ,rollingFile
  10. const _DATEFORMAT = "2006-01-02"
  11. var logLevel LEVEL = 1
  12. const (
  13. _ = iota
  14. KB UNIT = 1 << (iota * 10)
  15. MB
  16. GB
  17. TB
  18. )
  19. const (
  20. ALL LEVEL = iota
  21. DEBUG
  22. INFO
  23. WARN
  24. ERROR
  25. FATAL
  26. OFF
  27. )
  28. const (
  29. _DAILY _ROLLTYPE = iota
  30. _ROLLFILE
  31. )
  32. func SetConsole(isConsole bool) {
  33. defaultlog.setConsole(isConsole)
  34. }
  35. func SetLevel(_level LEVEL) {
  36. defaultlog.setLevel(_level)
  37. }
  38. func SetFormat(logFormat string) {
  39. defaultlog.setFormat(logFormat)
  40. }
  41. func SetRollingFile(fileDir, fileName string, maxNumber int32, maxSize int64, _unit UNIT) {
  42. // maxFileCount = maxNumber
  43. // maxFileSize = maxSize * int64(_unit)
  44. // RollingFile = true
  45. // dailyRolling = false
  46. // mkdirlog(fileDir)
  47. // logObj = &_FILE{dir: fileDir, filename: fileName, isCover: false, mu: new(sync.RWMutex)}
  48. // logObj.mu.Lock()
  49. // defer logObj.mu.Unlock()
  50. // for i := 1; i <= int(maxNumber); i++ {
  51. // if isExist(fileDir + "/" + fileName + "." + strconv.Itoa(i)) {
  52. // logObj._suffix = i
  53. // } else {
  54. // break
  55. // }
  56. // }
  57. // if !logObj.isMustRename() {
  58. // logObj.logfile, _ = os.OpenFile(fileDir+"/"+fileName, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
  59. // logObj.lg = log.New(logObj.logfile, "", log.Ldate|log.Ltime|log.Lshortfile)
  60. // } else {
  61. // logObj.rename()
  62. // }
  63. // go fileMonitor()
  64. defaultlog.setRollingFile(fileDir, fileName, maxNumber, maxSize, _unit)
  65. }
  66. func SetRollingDaily(fileDir, fileName string) {
  67. // RollingFile = false
  68. // dailyRolling = true
  69. // t, _ := time.Parse(_DATEFORMAT, time.Now().Format(_DATEFORMAT))
  70. // mkdirlog(fileDir)
  71. // logObj = &_FILE{dir: fileDir, filename: fileName, _date: &t, isCover: false, mu: new(sync.RWMutex)}
  72. // logObj.mu.Lock()
  73. // defer logObj.mu.Unlock()
  74. // if !logObj.isMustRename() {
  75. // logObj.logfile, _ = os.OpenFile(fileDir+"/"+fileName, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
  76. // logObj.lg = log.New(logObj.logfile, "", log.Ldate|log.Ltime|log.Lshortfile)
  77. // } else {
  78. // logObj.rename()
  79. // }
  80. defaultlog.setRollingDaily(fileDir, fileName)
  81. }
  82. //func console(s ...interface{}) {
  83. // if consoleAppender {
  84. // _, file, line, _ := runtime.Caller(2)
  85. // short := file
  86. // for i := len(file) - 1; i > 0; i-- {
  87. // if file[i] == '/' {
  88. // short = file[i+1:]
  89. // break
  90. // }
  91. // }
  92. // file = short
  93. // log.Println(file, strconv.Itoa(line), s)
  94. // }
  95. //}
  96. //func catchError() {
  97. // if err := recover(); err != nil {
  98. // log.Println("err", err)
  99. // }
  100. //}
  101. func Debug(v ...interface{}) {
  102. // if dailyRolling {
  103. // fileCheck()
  104. // }
  105. // defer catchError()
  106. // if logObj != nil {
  107. // logObj.mu.RLock()
  108. // defer logObj.mu.RUnlock()
  109. // }
  110. // if logLevel <= DEBUG {
  111. // if logObj != nil {
  112. // logObj.lg.Output(2, fmt.Sprintln("debug", v))
  113. // }
  114. // console("debug", v)
  115. // }
  116. defaultlog.debug(v...)
  117. }
  118. func Info(v ...interface{}) {
  119. // if dailyRolling {
  120. // fileCheck()
  121. // }
  122. // defer catchError()
  123. // if logObj != nil {
  124. // logObj.mu.RLock()
  125. // defer logObj.mu.RUnlock()
  126. // }
  127. // if logLevel <= INFO {
  128. // if logObj != nil {
  129. // if format == "" {
  130. // logObj.lg.Output(2, fmt.Sprintln("info", v))
  131. // } else {
  132. // logObj.lg.Output(2, fmt.Sprintf(format, v...))
  133. // }
  134. // }
  135. // console("info", v)
  136. // }
  137. defaultlog.info(v...)
  138. }
  139. func Warn(v ...interface{}) {
  140. // if dailyRolling {
  141. // fileCheck()
  142. // }
  143. // defer catchError()
  144. // if logObj != nil {
  145. // logObj.mu.RLock()
  146. // defer logObj.mu.RUnlock()
  147. // }
  148. // if logLevel <= WARN {
  149. // if logObj != nil {
  150. // logObj.lg.Output(2, fmt.Sprintln("warn", v))
  151. // }
  152. // console("warn", v)
  153. // }
  154. defaultlog.warn(v...)
  155. }
  156. func Error(v ...interface{}) {
  157. // if dailyRolling {
  158. // fileCheck()
  159. // }
  160. // defer catchError()
  161. // if logObj != nil {
  162. // logObj.mu.RLock()
  163. // defer logObj.mu.RUnlock()
  164. // }
  165. // if logLevel <= ERROR {
  166. // if logObj != nil {
  167. // logObj.lg.Output(2, fmt.Sprintln("error", v))
  168. // }
  169. // console("error", v)
  170. // }
  171. defaultlog.error(v...)
  172. }
  173. func Fatal(v ...interface{}) {
  174. // if dailyRolling {
  175. // fileCheck()
  176. // }
  177. // defer catchError()
  178. // if logObj != nil {
  179. // logObj.mu.RLock()
  180. // defer logObj.mu.RUnlock()
  181. // }
  182. // if logLevel <= FATAL {
  183. // if logObj != nil {
  184. // logObj.lg.Output(2, fmt.Sprintln("fatal", v))
  185. // }
  186. // console("fatal", v)
  187. // }
  188. defaultlog.fatal(v...)
  189. }
  190. func SetLevelFile(level LEVEL, dir, fileName string) {
  191. defaultlog.setLevelFile(level, dir, fileName)
  192. }
  193. //func isMustRename() bool {
  194. // if dailyRolling {
  195. // t, _ := time.Parse(_DATEFORMAT, time.Now().Format(_DATEFORMAT))
  196. // if t.After(*f._date) {
  197. // return true
  198. // }
  199. // } else {
  200. // if maxFileCount > 1 {
  201. // if fileSize(f.dir+"/"+f.filename) >= maxFileSize {
  202. // return true
  203. // }
  204. // }
  205. // }
  206. // return false
  207. //}
  208. //func rename() {
  209. // if dailyRolling {
  210. // fn := f.dir + "/" + f.filename + "." + f._date.Format(_DATEFORMAT)
  211. // if !isExist(fn) && f.isMustRename() {
  212. // if f.logfile != nil {
  213. // f.logfile.Close()
  214. // }
  215. // err := os.Rename(f.dir+"/"+f.filename, fn)
  216. // if err != nil {
  217. // f.lg.Println("rename err", err.Error())
  218. // }
  219. // t, _ := time.Parse(_DATEFORMAT, time.Now().Format(_DATEFORMAT))
  220. // f._date = &t
  221. // f.logfile, _ = os.Create(f.dir + "/" + f.filename)
  222. // f.lg = log.New(logObj.logfile, "\n", log.Ldate|log.Ltime|log.Lshortfile)
  223. // }
  224. // } else {
  225. // f.coverNextOne()
  226. // }
  227. //}
  228. //func nextSuffix() int {
  229. // return int(f._suffix%int(maxFileCount) + 1)
  230. //}
  231. //func coverNextOne() {
  232. // f._suffix = f.nextSuffix()
  233. // if f.logfile != nil {
  234. // f.logfile.Close()
  235. // }
  236. // if isExist(f.dir + "/" + f.filename + "." + strconv.Itoa(int(f._suffix))) {
  237. // os.Remove(f.dir + "/" + f.filename + "." + strconv.Itoa(int(f._suffix)))
  238. // }
  239. // os.Rename(f.dir+"/"+f.filename, f.dir+"/"+f.filename+"."+strconv.Itoa(int(f._suffix)))
  240. // f.logfile, _ = os.Create(f.dir + "/" + f.filename)
  241. // f.lg = log.New(logObj.logfile, "\n", log.Ldate|log.Ltime|log.Lshortfile)
  242. //}
  243. //func fileMonitor() {
  244. // timer := time.NewTicker(1 * time.Second)
  245. // for {
  246. // select {
  247. // case <-timer.C:
  248. // fileCheck()
  249. // }
  250. // }
  251. //}
  252. //func fileCheck() {
  253. // defer func() {
  254. // if err := recover(); err != nil {
  255. // log.Println(err)
  256. // }
  257. // }()
  258. // if logObj != nil && logObj.isMustRename() {
  259. // logObj.mu.Lock()
  260. // defer logObj.mu.Unlock()
  261. // logObj.rename()
  262. // }
  263. //}