NavisworksTransport/LogManager.cs

140 lines
4.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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}");
}
}
}