clear_logs_job.go 1.3 KB

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