logging.go 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. /*
  2. * EliasDB
  3. *
  4. * Copyright 2016 Matthias Ladkau. All rights reserved.
  5. *
  6. * This Source Code Form is subject to the terms of the Mozilla Public
  7. * License, v. 2.0. If a copy of the MPL was not distributed with this
  8. * file, You can obtain one at http://mozilla.org/MPL/2.0/.
  9. */
  10. /*
  11. Package ecal contains the main API for the event condition language ECAL.
  12. */
  13. package ecal
  14. import (
  15. "fmt"
  16. "log"
  17. "devt.de/krotik/common/datautil"
  18. )
  19. // Logging
  20. // =======
  21. /*
  22. Logger is an interface for log message consumers.
  23. */
  24. type Logger interface {
  25. /*
  26. LogError adds a new error log message.
  27. */
  28. LogError(p *Processor, v ...interface{})
  29. /*
  30. LogInfo adds a new info log message.
  31. */
  32. LogInfo(p *Processor, v ...interface{})
  33. /*
  34. LogDebug adds a new debug log message.
  35. */
  36. LogDebug(p *Processor, v ...interface{})
  37. }
  38. /*
  39. MemoryLogger collects log messages in a RingBuffer in memory.
  40. */
  41. type MemoryLogger struct {
  42. *datautil.RingBuffer
  43. }
  44. /*
  45. NewMemoryLogger returns a new memory logger instance.
  46. */
  47. func NewMemoryLogger(size int) *MemoryLogger {
  48. return &MemoryLogger{datautil.NewRingBuffer(size)}
  49. }
  50. /*
  51. LogError adds a new error log message.
  52. */
  53. func (ml *MemoryLogger) LogError(p *Processor, m ...interface{}) {
  54. ml.RingBuffer.Add(fmt.Sprintf("error: %v", fmt.Sprint(m...)))
  55. }
  56. /*
  57. LogInfo adds a new info log message.
  58. */
  59. func (ml *MemoryLogger) LogInfo(p *Processor, m ...interface{}) {
  60. ml.RingBuffer.Add(fmt.Sprintf("info: %v", fmt.Sprint(m...)))
  61. }
  62. /*
  63. LogDebug adds a new debug log message.
  64. */
  65. func (ml *MemoryLogger) LogDebug(p *Processor, m ...interface{}) {
  66. ml.RingBuffer.Add(fmt.Sprintf("debug: %v", fmt.Sprint(m...)))
  67. }
  68. /*
  69. Slice returns the contents of the current log as a slice.
  70. */
  71. func (ml *MemoryLogger) Slice() []string {
  72. sl := ml.RingBuffer.Slice()
  73. ret := make([]string, len(sl))
  74. for i, lm := range sl {
  75. ret[i] = lm.(string)
  76. }
  77. return ret
  78. }
  79. /*
  80. Reset resets the current log.
  81. */
  82. func (ml *MemoryLogger) Reset() {
  83. ml.RingBuffer.Reset()
  84. }
  85. /*
  86. Size returns the current log size.
  87. */
  88. func (ml *MemoryLogger) Size() int {
  89. return ml.RingBuffer.Size()
  90. }
  91. /*
  92. String returns the current log as a string.
  93. */
  94. func (ml *MemoryLogger) String() string {
  95. return ml.RingBuffer.String()
  96. }
  97. /*
  98. StdOutLogger writes log messages to stdout.
  99. */
  100. type StdOutLogger struct {
  101. stdlog func(v ...interface{})
  102. }
  103. /*
  104. NewStdOutLogger returns a stdout logger instance.
  105. */
  106. func NewStdOutLogger() Logger {
  107. return &StdOutLogger{log.Print}
  108. }
  109. /*
  110. LogError adds a new error log message.
  111. */
  112. func (sl *StdOutLogger) LogError(p *Processor, m ...interface{}) {
  113. sl.stdlog(fmt.Sprintf("error: %v", fmt.Sprint(m...)))
  114. }
  115. /*
  116. LogInfo adds a new info log message.
  117. */
  118. func (sl *StdOutLogger) LogInfo(p *Processor, m ...interface{}) {
  119. sl.stdlog(fmt.Sprintf("error: %v", fmt.Sprint(m...)))
  120. }
  121. /*
  122. LogDebug adds a new debug log message.
  123. */
  124. func (sl *StdOutLogger) LogDebug(p *Processor, m ...interface{}) {
  125. sl.stdlog(fmt.Sprintf("error: %v", fmt.Sprint(m...)))
  126. }
  127. /*
  128. NullLogger discards log messages.
  129. */
  130. type NullLogger struct {
  131. }
  132. /*
  133. NewNullLogger returns a null logger instance.
  134. */
  135. func NewNullLogger() Logger {
  136. return &NullLogger{}
  137. }
  138. /*
  139. LogError adds a new error log message.
  140. */
  141. func (nl *NullLogger) LogError(p *Processor, m ...interface{}) {
  142. }
  143. /*
  144. LogInfo adds a new info log message.
  145. */
  146. func (nl *NullLogger) LogInfo(p *Processor, m ...interface{}) {
  147. }
  148. /*
  149. LogDebug adds a new debug log message.
  150. */
  151. func (nl *NullLogger) LogDebug(p *Processor, m ...interface{}) {
  152. }