AutoClearLog.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\NodeDailyDataFlow;
  4. use App\Models\NodeHeartBeat;
  5. use App\Models\NodeHourlyDataFlow;
  6. use App\Models\NodeOnlineLog;
  7. use App\Models\NodeOnlineUserIp;
  8. use App\Models\UserBanedLog;
  9. use App\Models\UserDailyDataFlow;
  10. use App\Models\UserDataFlowLog;
  11. use App\Models\UserHourlyDataFlow;
  12. use App\Models\UserLoginLog;
  13. use App\Models\UserSubscribeLog;
  14. use Exception;
  15. use Illuminate\Console\Command;
  16. use Log;
  17. class AutoClearLog extends Command
  18. {
  19. protected $signature = 'autoClearLog';
  20. protected $description = '自动清除日志';
  21. public function handle(): void
  22. {
  23. $jobStartTime = microtime(true);
  24. // 清除日志
  25. if (sysConfig('is_clear_log')) {
  26. $this->clearLog();
  27. }
  28. $jobEndTime = microtime(true);
  29. $jobUsedTime = round(($jobEndTime - $jobStartTime), 4);
  30. Log::info(
  31. '---【' . $this->description . '】完成---,耗时' . $jobUsedTime . '秒'
  32. );
  33. }
  34. // 清除日志
  35. private function clearLog(): void
  36. {
  37. try {
  38. // 清除节点负载信息日志
  39. NodeHeartBeat::where('log_time', '<=', strtotime("-30 minutes"))
  40. ->delete();
  41. // 清除节点在线用户数日志
  42. NodeOnlineLog::where('log_time', '<=', strtotime("-1 hour"))
  43. ->delete();
  44. // 清除用户流量日志
  45. UserDataFlowLog::where('log_time', '<=', strtotime("-3 days"))
  46. ->delete();
  47. // 清除用户每时各流量数据日志
  48. UserHourlyDataFlow::where(
  49. 'created_at',
  50. '<=',
  51. date('Y-m-d H:i:s', strtotime('-3 days'))
  52. )->delete();
  53. // 清除用户各节点 / 节点总计的每天流量数据日志
  54. UserDailyDataFlow::where('node_id', '<>', 0)
  55. ->where(
  56. 'created_at',
  57. '<=',
  58. date('Y-m-d H:i:s', strtotime('-1 month'))
  59. )
  60. ->orWhere(
  61. 'created_at',
  62. '<=',
  63. date(
  64. 'Y-m-d H:i:s',
  65. strtotime('-3 month')
  66. )
  67. )
  68. ->delete();
  69. // 清除节点每小时流量数据日志
  70. NodeHourlyDataFlow::where(
  71. 'created_at',
  72. '<=',
  73. date('Y-m-d H:i:s', strtotime('-3 days'))
  74. )->delete();
  75. // 清除节点每天流量数据日志
  76. NodeDailyDataFlow::where(
  77. 'created_at',
  78. '<=',
  79. date('Y-m-d H:i:s', strtotime('-2 month'))
  80. )->delete();
  81. // 清除用户封禁日志
  82. UserBanedLog::where(
  83. 'created_at',
  84. '<=',
  85. date('Y-m-d H:i:s', strtotime("-3 month"))
  86. )->delete();
  87. // 清除用户连接IP
  88. NodeOnlineUserIp::where('created_at', '<=', strtotime("-1 month"))
  89. ->delete();
  90. // 清除用户登陆日志
  91. UserLoginLog::where(
  92. 'created_at',
  93. '<=',
  94. date('Y-m-d H:i:s', strtotime("-3 month"))
  95. )->delete();
  96. // 清除用户订阅记录
  97. UserSubscribeLog::where(
  98. 'request_time',
  99. '<=',
  100. date('Y-m-d H:i:s', strtotime("-1 month"))
  101. )->delete();
  102. } catch (Exception $e) {
  103. Log::error('【清理日志】错误: ' . $e->getMessage());
  104. }
  105. }
  106. }