using System;
using System.IO;
namespace AutoFocusTool.Logging
{
///
/// 静态文件日志器:程序启动时按时间戳建一个文件,本次运行所有日志写入它。
/// 线程安全(lock),每条 flush。格式:HH:mm:ss.fff [级别] [类别] 消息
///
public static class FileLogger
{
private static readonly object _lock = new object();
private static string _path;
/// 启动时调用一次:在 Logs/ 下建 yyyy-MM-dd_HHmmss.log。
public static void Init()
{
lock (_lock)
{
if (_path != null) return;
string dir = @"C:\claudeFile\TL\AutoFocusTool\Logs";
Directory.CreateDirectory(dir);
_path = Path.Combine(dir, $"{DateTime.Now:yyyy-MM-dd_HHmmss}.log");
Write("INFO", "APP", "==== 日志开始 ====");
}
}
public static void Info(string category, string msg) => Write("INFO", category, msg);
public static void Action(string category, string msg) => Write("ACTION", category, msg);
public static void Data(string category, string msg) => Write("DATA", category, msg);
public static void Warn(string category, string msg) => Write("WARN", category, msg);
public static void Error(string category, string msg) => Write("ERROR", category, msg);
private static void Write(string level, string category, string msg)
{
try
{
lock (_lock)
{
if (_path == null) return; // 未 Init 则静默丢弃
string line = $"{DateTime.Now:HH:mm:ss.fff} [{level,-6}] [{category,-6}] {msg}";
File.AppendAllText(_path, line + Environment.NewLine);
}
}
catch { /* 日志失败不能影响主流程 */ }
}
}
}