12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- using LJLib.Tools.File;
- using System;
- using System.IO;
- using System.Threading;
- namespace LJLib.TextLog
- {
- internal class RequestLogger : ILogger
- {
- private readonly string _logDir;
- private Timer _timer;
- private readonly object _syncRoot = new object();
- public RequestLogger(string logDir = null)
- {
- // 默认目录为执行目录下的 log 文件夹
- _logDir = logDir ?? Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "log");
- if (!Directory.Exists(_logDir)) Directory.CreateDirectory(_logDir);
- // 创建定时器:立即启动,每隔24小时执行一次
- _timer = new Timer(CleanupOldLogs, null, 0, 24 * 60 * 60 * 1000);
- }
- /// <summary>
- /// 获取今天的日志文件全路径
- /// </summary>
- private string GetTodayLogFile()
- {
- string fileName = $"REQUEST_{DateTime.Now:yyyyMMdd}.log";
- return Path.Combine(_logDir, fileName);
- }
- /// <summary>
- /// 写入日志
- /// </summary>
- public void WriteLog(string msg)
- {
- try
- {
- lock (_syncRoot)
- {
- string filePath = GetTodayLogFile();
- using (StreamWriter sw = new StreamWriter(filePath, true))
- {
- sw.WriteLine("====================================================================");
- sw.WriteLine($"时间: {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
- sw.WriteLine("--------------------------------------------------------------------");
- sw.WriteLine(msg);
- sw.WriteLine("====================================================================");
- sw.WriteLine();
- }
- }
- }
- catch
- {
- // 这里可考虑写到系统事件日志或忽略
- }
- }
- /// <summary>
- /// 清理7天前的日志文件
- /// </summary>
- private void CleanupOldLogs(object state)
- {
- try
- {
- var files = Directory.GetFiles(_logDir, "REQUEST_*.log");
- DateTime threshold = DateTime.Now.AddDays(-7);
- foreach (var file in files)
- {
- string fileName = Path.GetFileNameWithoutExtension(file);
- // 格式: REQUEST_yyyyMMdd
- if (fileName.Length == "REQUEST_yyyyMMdd".Length &&
- DateTime.TryParseExact(fileName.Replace("REQUEST_", ""),
- "yyyyMMdd",
- null,
- System.Globalization.DateTimeStyles.None,
- out DateTime logDate))
- {
- if (logDate < threshold.Date)
- {
- File.Delete(file);
- }
- }
- }
- }
- catch
- {
- }
- }
- }
- }
|