LumaTunnel
【WinUI】LumaTunnel 是一个面向个人多设备的 Windows 代理系统。客户端在本机提供 HTTP/HTTPS CONNECT 与 SOCKS5 TCP 代理,并通过一个受信任 TLS 证书保护的 WSS 会话,将多个 TCP 流复用到自建 Windows Server 节点。
关注
0
Fork
0
Star
0
namespace LumaTunnel.Client.Utilities;
internal static class AppLog
{
private static readonly object s_gate = new();
private static string? s_path;
public static void Initialize(string directory)
{
Directory.CreateDirectory(directory);
s_path = Path.Combine(directory, $"lumatunnel-{DateTime.Now:yyyyMMdd-HHmmss}.log");
foreach (var old in Directory.GetFiles(directory, "lumatunnel-*.log").OrderByDescending(static item => item, StringComparer.OrdinalIgnoreCase).Skip(10))
File.Delete(old);
Write("INFO", "Client logging initialized.");
}
public static void Write(string level, string message, Exception? exception = null)
{
var path = s_path;
if (path is null) return;
var safeMessage = message.Replace("\r", " ", StringComparison.Ordinal).Replace("\n", " ", StringComparison.Ordinal);
var line = $"{DateTimeOffset.Now:O} [{level}] {safeMessage}{(exception is null ? string.Empty : " | " + exception.GetType().Name)}{Environment.NewLine}";
lock (s_gate) File.AppendAllText(path, line, System.Text.Encoding.UTF8);
}
}
namespace LumaTunnel.Client.Utilities;
internal static class AppLog
{
private static readonly object s_gate = new();
private static string? s_path;
public static void Initialize(string directory)
{
Directory.CreateDirectory(directory);
s_path = Path.Combine(directory, $"lumatunnel-{DateTime.Now:yyyyMMdd-HHmmss}.log");
foreach (var old in Directory.GetFiles(directory, "lumatunnel-*.log").OrderByDescending(static item => item, StringComparer.OrdinalIgnoreCase).Skip(10))
File.Delete(old);
Write("INFO", "Client logging initialized.");
}
public static void Write(string level, string message, Exception? exception = null)
{
var path = s_path;
if (path is null) return;
var safeMessage = message.Replace("\r", " ", StringComparison.Ordinal).Replace("\n", " ", StringComparison.Ordinal);
var line = $"{DateTimeOffset.Now:O} [{level}] {safeMessage}{(exception is null ? string.Empty : " | " + exception.GetType().Name)}{Environment.NewLine}";
lock (s_gate) File.AppendAllText(path, line, System.Text.Encoding.UTF8);
}
}