write.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package zlog
  2. import (
  3. "fmt"
  4. "io"
  5. "log"
  6. "os"
  7. "time"
  8. "sikey.com/websocket/utils/format"
  9. )
  10. const (
  11. // 控制环境不写入到 es 数据库里
  12. notPushEnvironment = "env"
  13. )
  14. type Writer interface {
  15. io.Writer
  16. GetEnv() string
  17. }
  18. type ZeroWriter struct {
  19. name string
  20. path string
  21. env string
  22. }
  23. func NewZeroWriter(name, path, env string) (*ZeroWriter, error) {
  24. return &ZeroWriter{name: name, path: path, env: env}, nil
  25. }
  26. func (w *ZeroWriter) GetEnv() string {
  27. return w.env
  28. }
  29. func (w *ZeroWriter) Write(p []byte) (int, error) {
  30. // date
  31. date := time.Now().Format(format.DateParseLeftFormat)
  32. filename := fmt.Sprintf("%s/%s-%s.log", w.path, w.name, date)
  33. var err error
  34. var file *os.File
  35. if fileStat(filename) {
  36. file, err = os.OpenFile(filename, os.O_RDWR|os.O_APPEND, os.ModeAppend)
  37. } else {
  38. file, err = os.Create(filename)
  39. }
  40. if err != nil {
  41. log.Println("open file error: ", err)
  42. }
  43. return file.Write(p)
  44. }
  45. // fileStat 检查文件是否存在
  46. func fileStat(path string) bool {
  47. _, err := os.Stat(path)
  48. if err == nil {
  49. return true
  50. }
  51. return os.IsExist(err)
  52. }