| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- <?php
- namespace App\Module\Admin\Services;
- use Illuminate\Support\Facades\File;
- use Illuminate\Support\Facades\Log;
- use Carbon\Carbon;
- /**
- * 日志管理服务
- */
- class LogService
- {
- /**
- * 清理旧日志
- *
- * @param int $days 保留天数
- * @return array
- */
- public function cleanOldLogs(int $days = 30): array
- {
- $results = [];
- $logPath = storage_path('logs');
-
- try {
- $cutoffDate = Carbon::now()->subDays($days);
- $deletedFiles = 0;
- $deletedSize = 0;
-
- $files = File::glob($logPath . '/*.log');
-
- foreach ($files as $file) {
- $fileTime = Carbon::createFromTimestamp(File::lastModified($file));
-
- if ($fileTime->lt($cutoffDate)) {
- $size = File::size($file);
- File::delete($file);
- $deletedFiles++;
- $deletedSize += $size;
- }
- }
-
- $results = [
- 'status' => 'success',
- 'message' => "清理完成,删除了 {$deletedFiles} 个文件",
- 'deleted_files' => $deletedFiles,
- 'deleted_size' => $this->formatBytes($deletedSize),
- ];
-
- Log::info('Admin: 日志清理完成', $results);
-
- } catch (\Exception $e) {
- $results = [
- 'status' => 'error',
- 'message' => $e->getMessage(),
- ];
-
- Log::error('Admin: 日志清理失败', ['error' => $e->getMessage()]);
- }
-
- return $results;
- }
- /**
- * 获取日志统计信息
- *
- * @return array
- */
- public function getLogStatistics(): array
- {
- $logPath = storage_path('logs');
- $files = File::glob($logPath . '/*.log');
-
- $totalSize = 0;
- $fileCount = count($files);
- $oldestFile = null;
- $newestFile = null;
-
- foreach ($files as $file) {
- $totalSize += File::size($file);
- $fileTime = Carbon::createFromTimestamp(File::lastModified($file));
-
- if (!$oldestFile || $fileTime->lt($oldestFile)) {
- $oldestFile = $fileTime;
- }
-
- if (!$newestFile || $fileTime->gt($newestFile)) {
- $newestFile = $fileTime;
- }
- }
-
- return [
- 'total_files' => $fileCount,
- 'total_size' => $this->formatBytes($totalSize),
- 'oldest_file' => $oldestFile?->format('Y-m-d H:i:s'),
- 'newest_file' => $newestFile?->format('Y-m-d H:i:s'),
- ];
- }
- /**
- * 格式化字节数
- *
- * @param int $bytes
- * @return string
- */
- protected function formatBytes(int $bytes): string
- {
- $units = ['B', 'KB', 'MB', 'GB', 'TB'];
-
- for ($i = 0; $bytes > 1024 && $i < count($units) - 1; $i++) {
- $bytes /= 1024;
- }
-
- return round($bytes, 2) . ' ' . $units[$i];
- }
- }
|