140 lines
4.4 KiB
C#
140 lines
4.4 KiB
C#
using System;
|
||
using System.IO;
|
||
|
||
namespace NavisworksTransport
|
||
{
|
||
/// <summary>
|
||
/// 统一日志管理器
|
||
/// 提供全局日志记录功能
|
||
/// </summary>
|
||
public static class LogManager
|
||
{
|
||
private static readonly string _logFilePath = Path.Combine(
|
||
Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
|
||
"NavisworksTransport_Debug.log");
|
||
|
||
private static readonly object _lockObject = new object();
|
||
|
||
/// <summary>
|
||
/// 日志文件路径
|
||
/// </summary>
|
||
public static string LogFilePath => _logFilePath;
|
||
|
||
/// <summary>
|
||
/// 清空调试日志
|
||
/// </summary>
|
||
public static void ClearLog()
|
||
{
|
||
try
|
||
{
|
||
lock (_lockObject)
|
||
{
|
||
if (File.Exists(_logFilePath))
|
||
{
|
||
// 如果文件太大,分两步删除:先清空内容,再删除文件
|
||
var fileInfo = new FileInfo(_logFilePath);
|
||
if (fileInfo.Length > 10 * 1024 * 1024) // 如果大于10MB
|
||
{
|
||
// 先创建一个空文件覆盖原文件
|
||
File.WriteAllText(_logFilePath, string.Empty);
|
||
System.Threading.Thread.Sleep(100); // 短暂等待
|
||
}
|
||
File.Delete(_logFilePath);
|
||
}
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
// 忽略文件删除错误,但尝试创建一个新的空文件
|
||
try
|
||
{
|
||
File.WriteAllText(_logFilePath, $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] 日志已重置\n");
|
||
}
|
||
catch
|
||
{
|
||
// 完全忽略错误
|
||
}
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 写入调试日志(同时输出到Debug和文件)
|
||
/// </summary>
|
||
/// <param name="message">日志消息</param>
|
||
public static void WriteLog(string message)
|
||
{
|
||
var logMessage = $"[{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}] {message}";
|
||
System.Diagnostics.Debug.WriteLine(logMessage);
|
||
|
||
try
|
||
{
|
||
lock (_lockObject)
|
||
{
|
||
File.AppendAllText(_logFilePath, logMessage + Environment.NewLine);
|
||
}
|
||
}
|
||
catch
|
||
{
|
||
// 忽略文件写入错误
|
||
}
|
||
}
|
||
|
||
/// <summary>
|
||
/// 写入信息级别日志
|
||
/// </summary>
|
||
/// <param name="message">日志消息</param>
|
||
public static void Info(string message)
|
||
{
|
||
WriteLog($"[INFO] {message}");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 写入警告级别日志
|
||
/// </summary>
|
||
/// <param name="message">日志消息</param>
|
||
public static void Warning(string message)
|
||
{
|
||
WriteLog($"[WARN] {message}");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 写入错误级别日志
|
||
/// </summary>
|
||
/// <param name="message">日志消息</param>
|
||
public static void Error(string message)
|
||
{
|
||
WriteLog($"[ERROR] {message}");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 写入错误级别日志(包含异常信息)
|
||
/// </summary>
|
||
/// <param name="message">日志消息</param>
|
||
/// <param name="exception">异常对象</param>
|
||
public static void Error(string message, Exception exception)
|
||
{
|
||
WriteLog($"[ERROR] {message}: {exception.Message}");
|
||
WriteLog($"[ERROR] 堆栈跟踪: {exception.StackTrace}");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 写入调试级别日志
|
||
/// </summary>
|
||
/// <param name="message">日志消息</param>
|
||
public static void Debug(string message)
|
||
{
|
||
WriteLog($"[DEBUG] {message}");
|
||
}
|
||
|
||
/// <summary>
|
||
/// 写入会话分隔符,标记新的操作会话开始
|
||
/// </summary>
|
||
public static void WriteSessionSeparator()
|
||
{
|
||
var separator = new string('=', 60);
|
||
WriteLog($"{separator}");
|
||
WriteLog($"[SESSION] 新会话开始 - {DateTime.Now:yyyy-MM-dd HH:mm:ss}");
|
||
WriteLog($"{separator}");
|
||
}
|
||
}
|
||
} |