clear_logs_job.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package job
  2. import (
  3. "io"
  4. "os"
  5. "x-ui/logger"
  6. "x-ui/xray"
  7. )
  8. type ClearLogsJob struct{}
  9. func NewClearLogsJob() *ClearLogsJob {
  10. return new(ClearLogsJob)
  11. }
  12. // Here Run is an interface method of the Job interface
  13. func (j *ClearLogsJob) Run() {
  14. logFiles := []string{xray.GetIPLimitLogPath(), xray.GetIPLimitBannedLogPath(), xray.GetAccessPersistentLogPath()}
  15. logFilesPrev := []string{xray.GetIPLimitBannedPrevLogPath(), xray.GetAccessPersistentPrevLogPath()}
  16. // clear old previous logs
  17. for i := 0; i < len(logFilesPrev); i++ {
  18. if err := os.Truncate(logFilesPrev[i], 0); err != nil {
  19. logger.Warning("clear logs job err:", err)
  20. }
  21. }
  22. // clear log files and copy to previous logs
  23. for i := 0; i < len(logFiles); i++ {
  24. if i > 0 {
  25. // copy to previous logs
  26. logFilePrev, err := os.OpenFile(logFilesPrev[i-1], os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
  27. if err != nil {
  28. logger.Warning("clear logs job err:", err)
  29. }
  30. logFile, err := os.Open(logFiles[i])
  31. if err != nil {
  32. logger.Warning("clear logs job err:", err)
  33. }
  34. _, err = io.Copy(logFilePrev, logFile)
  35. if err != nil {
  36. logger.Warning("clear logs job err:", err)
  37. }
  38. logFile.Close()
  39. logFilePrev.Close()
  40. }
  41. err := os.Truncate(logFiles[i], 0)
  42. if err != nil {
  43. logger.Warning("clear logs job err:", err)
  44. }
  45. }
  46. }