Improve logging system
This commit is contained in:
6
ADB.cs
6
ADB.cs
@@ -78,7 +78,7 @@ namespace AndroidSideloader
|
||||
_ = Logger.Log(output);
|
||||
}
|
||||
|
||||
_ = Logger.Log(error, "ERROR");
|
||||
_ = Logger.Log(error, LogLevel.ERROR);
|
||||
return new ProcessOutput(output, error);
|
||||
}
|
||||
}
|
||||
@@ -139,7 +139,7 @@ namespace AndroidSideloader
|
||||
ADBDebugWarning();
|
||||
}
|
||||
_ = Logger.Log(output);
|
||||
_ = Logger.Log(error, "ERROR");
|
||||
_ = Logger.Log(error, LogLevel.ERROR);
|
||||
return new ProcessOutput(output, error);
|
||||
}
|
||||
public static ProcessOutput RunCommandToString(string result, string path = "")
|
||||
@@ -190,7 +190,7 @@ namespace AndroidSideloader
|
||||
ADBDebugWarning();
|
||||
}
|
||||
_ = Logger.Log(output);
|
||||
_ = Logger.Log(error, "ERROR");
|
||||
_ = Logger.Log(error, LogLevel.ERROR);
|
||||
return new ProcessOutput(output, error);
|
||||
}
|
||||
|
||||
|
||||
26
MainForm.cs
26
MainForm.cs
@@ -650,7 +650,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
Devices.Add(currLine.Split(' ')[0]);
|
||||
_ = devicesComboBox.Items.Add(currLine.Split(' ')[0]);
|
||||
_ = Logger.Log(currLine.Split(' ')[0] + "\n", "INFO", false);
|
||||
_ = Logger.Log(currLine.Split(' ')[0] + "\n", LogLevel.INFO, false);
|
||||
}
|
||||
Debug.WriteLine(currLine);
|
||||
i++;
|
||||
@@ -809,7 +809,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_ = Logger.Log($"Unable to get available space with the exception: {ex}", "ERROR");
|
||||
_ = Logger.Log($"Unable to get available space with the exception: {ex}", LogLevel.ERROR);
|
||||
|
||||
}
|
||||
}
|
||||
@@ -859,7 +859,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_ = Logger.Log($"Exception on backup: {ex}", "ERROR");
|
||||
_ = Logger.Log($"Exception on backup: {ex}", LogLevel.ERROR);
|
||||
}
|
||||
})
|
||||
{
|
||||
@@ -1694,9 +1694,9 @@ namespace AndroidSideloader
|
||||
catch (Exception ex)
|
||||
{
|
||||
Game.ForeColor = colorFont_error;
|
||||
_ = Logger.Log($"An error occured while rendering game {release[SideloaderRCLONE.GameNameIndex]} in ListView", "ERROR");
|
||||
_ = Logger.Log($"An error occured while rendering game {release[SideloaderRCLONE.GameNameIndex]} in ListView", LogLevel.ERROR);
|
||||
_ = ADB.RunAdbCommandToString($"shell \"dumpsys package {packagename}\"");
|
||||
_ = Logger.Log($"ExMsg: {ex.Message}Installed:\"{InstalledVersionCode}\" Cloud:\"{Utilities.StringUtilities.KeepOnlyNumbers(release[SideloaderRCLONE.VersionCodeIndex])}\"", "ERROR");
|
||||
_ = Logger.Log($"ExMsg: {ex.Message}Installed:\"{InstalledVersionCode}\" Cloud:\"{Utilities.StringUtilities.KeepOnlyNumbers(release[SideloaderRCLONE.VersionCodeIndex])}\"", LogLevel.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2841,13 +2841,13 @@ Things you can try:
|
||||
catch (FormatException ex)
|
||||
{
|
||||
_ = FlexibleMessageBox.Show("The OBB Folder on the Quest seems to not exist or be empty\nPlease redownload the game or sideload the obb manually.", "OBB Size Undetectable!", MessageBoxButtons.OK);
|
||||
Logger.Log($"Unable to compare obbs with the exception: {ex.Message}", "ERROR");
|
||||
Logger.Log($"Unable to compare obbs with the exception: {ex.Message}", LogLevel.ERROR);
|
||||
FlexibleMessageBox.Show($"Error comparing OBB sizes: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Logger.Log($"Unexpected error occurred while comparing OBBs: {ex.Message}", "ERROR");
|
||||
Logger.Log($"Unexpected error occurred while comparing OBBs: {ex.Message}", LogLevel.ERROR);
|
||||
FlexibleMessageBox.Show($"Unexpected error comparing OBB sizes: {ex.Message}");
|
||||
return false;
|
||||
}
|
||||
@@ -3755,9 +3755,9 @@ Things you can try:
|
||||
catch (Exception ex)
|
||||
{
|
||||
Game.ForeColor = colorFont_error;
|
||||
_ = Logger.Log($"An error occured while rendering game {release[SideloaderRCLONE.GameNameIndex]} in ListView", "ERROR");
|
||||
_ = Logger.Log($"An error occured while rendering game {release[SideloaderRCLONE.GameNameIndex]} in ListView", LogLevel.ERROR);
|
||||
_ = ADB.RunAdbCommandToString($"shell \"dumpsys package {packagename}\"");
|
||||
_ = Logger.Log($"ExMsg: {ex.Message}Installed:\"{InstalledVersionCode}\" Cloud:\"{Utilities.StringUtilities.KeepOnlyNumbers(release[SideloaderRCLONE.VersionCodeIndex])}\"", "ERROR");
|
||||
_ = Logger.Log($"ExMsg: {ex.Message}Installed:\"{InstalledVersionCode}\" Cloud:\"{Utilities.StringUtilities.KeepOnlyNumbers(release[SideloaderRCLONE.VersionCodeIndex])}\"", LogLevel.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4092,9 +4092,9 @@ Things you can try:
|
||||
catch (Exception ex)
|
||||
{
|
||||
Game.ForeColor = colorFont_error;
|
||||
_ = Logger.Log($"An error occured while rendering game {release[SideloaderRCLONE.GameNameIndex]} in ListView", "ERROR");
|
||||
_ = Logger.Log($"An error occured while rendering game {release[SideloaderRCLONE.GameNameIndex]} in ListView", LogLevel.ERROR);
|
||||
_ = ADB.RunAdbCommandToString($"shell \"dumpsys package {packagename}\"");
|
||||
_ = Logger.Log($"ExMsg: {ex.Message}Installed:\"{InstalledVersionCode}\" Cloud:\"{Utilities.StringUtilities.KeepOnlyNumbers(release[SideloaderRCLONE.VersionCodeIndex])}\"", "ERROR");
|
||||
_ = Logger.Log($"ExMsg: {ex.Message}Installed:\"{InstalledVersionCode}\" Cloud:\"{Utilities.StringUtilities.KeepOnlyNumbers(release[SideloaderRCLONE.VersionCodeIndex])}\"", LogLevel.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4236,9 +4236,9 @@ Things you can try:
|
||||
catch (Exception ex)
|
||||
{
|
||||
Game.ForeColor = colorFont_error;
|
||||
_ = Logger.Log($"An error occured while rendering game {release[SideloaderRCLONE.GameNameIndex]} in ListView", "ERROR");
|
||||
_ = Logger.Log($"An error occured while rendering game {release[SideloaderRCLONE.GameNameIndex]} in ListView", LogLevel.ERROR);
|
||||
_ = ADB.RunAdbCommandToString($"shell \"dumpsys package {packagename}\"");
|
||||
_ = Logger.Log($"ExMsg: {ex.Message}Installed:\"{InstalledVersionCode}\" Cloud:\"{Utilities.StringUtilities.KeepOnlyNumbers(release[SideloaderRCLONE.VersionCodeIndex])}\"", "ERROR");
|
||||
_ = Logger.Log($"ExMsg: {ex.Message}Installed:\"{InstalledVersionCode}\" Cloud:\"{Utilities.StringUtilities.KeepOnlyNumbers(release[SideloaderRCLONE.VersionCodeIndex])}\"", LogLevel.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
14
RCLONE.cs
14
RCLONE.cs
@@ -33,7 +33,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_ = Logger.Log("Exception occured while attempting to shut down RCLONE", "ERROR");
|
||||
_ = Logger.Log("Exception occured while attempting to shut down RCLONE", LogLevel.ERROR);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -151,7 +151,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(error))
|
||||
{
|
||||
_ = Logger.Log($"Rclone error: {error}\n", "ERROR");
|
||||
_ = Logger.Log($"Rclone error: {error}\n", LogLevel.ERROR);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(output))
|
||||
@@ -215,7 +215,7 @@ namespace AndroidSideloader
|
||||
//if there is one of these errors, we switch the mirrors
|
||||
if (error.Contains("400 Bad Request") || error.Contains("cannot fetch token") || error.Contains("authError") || error.Contains("quota") || error.Contains("exceeded") || error.Contains("directory not found") || error.Contains("Failed to"))
|
||||
{
|
||||
_ = Logger.Log(error, "ERROR");
|
||||
_ = Logger.Log(error, LogLevel.ERROR);
|
||||
return new ProcessOutput("Upload Failed.", "Upload failed.");
|
||||
}
|
||||
else
|
||||
@@ -228,7 +228,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(error))
|
||||
{
|
||||
_ = Logger.Log($"Rclone error: {error}\n", "ERROR");
|
||||
_ = Logger.Log($"Rclone error: {error}\n", LogLevel.ERROR);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(output))
|
||||
@@ -300,7 +300,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
|
||||
if (error.Contains("Only one usage of each socket address (protocol/network address/port) is normally permitted")) {
|
||||
_ = Logger.Log(error, "ERROR");
|
||||
_ = Logger.Log(error, LogLevel.ERROR);
|
||||
return new ProcessOutput("Failed to fetch from public mirror.", "Failed to fetch from public mirror.\nYou may have a running RCLONE Task!\nCheck your Task Manager, Sort by Network Usage, and kill the process Rsync for Cloud Storage/Rclone");
|
||||
}
|
||||
|
||||
@@ -312,7 +312,7 @@ namespace AndroidSideloader
|
||||
|| error.Contains("directory not found")
|
||||
|| error.Contains("Failed to"))
|
||||
{
|
||||
_ = Logger.Log(error, "ERROR");
|
||||
_ = Logger.Log(error, LogLevel.ERROR);
|
||||
return new ProcessOutput("Failed to fetch from public mirror.", "Failed to fetch from public mirror.");
|
||||
}
|
||||
else
|
||||
@@ -325,7 +325,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(error))
|
||||
{
|
||||
_ = Logger.Log($"Rclone error: {error}\n", "ERROR");
|
||||
_ = Logger.Log($"Rclone error: {error}\n", LogLevel.ERROR);
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(output))
|
||||
|
||||
@@ -106,7 +106,7 @@ namespace AndroidSideloader
|
||||
RecursiveSideload(d);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) { _ = Logger.Log(ex.Message, "ERROR"); }
|
||||
catch (Exception ex) { _ = Logger.Log(ex.Message, LogLevel.ERROR); }
|
||||
}
|
||||
|
||||
//Recursive copy any obb folder
|
||||
@@ -124,7 +124,7 @@ namespace AndroidSideloader
|
||||
RecursiveCopyOBB(d);
|
||||
}
|
||||
}
|
||||
catch (Exception ex) { _ = Logger.Log(ex.Message, "ERROR"); }
|
||||
catch (Exception ex) { _ = Logger.Log(ex.Message, LogLevel.ERROR); }
|
||||
}
|
||||
|
||||
//uninstalls an app
|
||||
@@ -340,7 +340,7 @@ namespace AndroidSideloader
|
||||
{
|
||||
if (version != "1.62.2")
|
||||
{
|
||||
Logger.Log("RCLONE Version not matching! Downloading required version.", "WARNING");
|
||||
Logger.Log("RCLONE Version not matching! Downloading required version.", LogLevel.WARNING);
|
||||
File.Delete(pathToRclone);
|
||||
currentAccessedWebsite = "rclone";
|
||||
string architecture = Environment.Is64BitOperatingSystem ? "amd64" : "386";
|
||||
|
||||
@@ -264,7 +264,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_ = Logger.Log($"Failed to update Upload config: {e.Message}", "ERROR");
|
||||
_ = Logger.Log($"Failed to update Upload config: {e.Message}", LogLevel.ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -293,7 +293,7 @@ namespace AndroidSideloader
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
_ = Logger.Log($"Failed to update Public config: {e.Message}", "ERROR");
|
||||
_ = Logger.Log($"Failed to update Public config: {e.Message}", LogLevel.ERROR);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@ namespace AndroidSideloader.Utilities
|
||||
string error = cmd.StandardError.ReadToEnd();
|
||||
string output = cmd.StandardOutput.ReadToEnd();
|
||||
_ = Logger.Log($"Output: {output}");
|
||||
_ = Logger.Log($"Error: {error}", "ERROR");
|
||||
_ = Logger.Log($"Error: {error}", LogLevel.ERROR);
|
||||
return new ProcessOutput(output, error);
|
||||
}
|
||||
|
||||
|
||||
@@ -1,23 +1,40 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace AndroidSideloader
|
||||
{
|
||||
internal class Logger
|
||||
public enum LogLevel
|
||||
{
|
||||
public string logfile = Properties.Settings.Default.CurrentLogPath;
|
||||
public static bool Log(string text, string logLevel = "NOTICE", bool ret = true)
|
||||
DEBUG,
|
||||
INFO,
|
||||
WARNING,
|
||||
ERROR,
|
||||
TRACE,
|
||||
FATAL
|
||||
}
|
||||
|
||||
public static class Logger
|
||||
{
|
||||
private static readonly object lockObject = new object();
|
||||
private static string logFilePath = Properties.Settings.Default.CurrentLogPath;
|
||||
private static bool enableContextualLogging = true;
|
||||
|
||||
public static bool Log(string text, LogLevel logLevel = LogLevel.INFO, bool ret = true)
|
||||
{
|
||||
if (text.Length <= 5)
|
||||
if (string.IsNullOrWhiteSpace(text) || text.Length <= 5)
|
||||
return ret;
|
||||
|
||||
string time = DateTime.UtcNow.ToString("hh:mmtt(UTC): ");
|
||||
string time = DateTime.UtcNow.ToString("hh:mm:ss.fff tt (UTC): ");
|
||||
string newline = text.Length > 40 && text.Contains("\n") ? "\n\n" : "\n";
|
||||
string logEntry = time + "[" + logLevel.ToUpper() + "] " + text + newline;
|
||||
string logEntry = time + "[" + logLevel.ToString().ToUpper() + "] [" + GetCallerInfo() + "] " + text + newline;
|
||||
|
||||
try
|
||||
{
|
||||
File.AppendAllText(Properties.Settings.Default.CurrentLogPath, logEntry);
|
||||
lock (lockObject)
|
||||
{
|
||||
File.AppendAllText(logFilePath, logEntry);
|
||||
}
|
||||
}
|
||||
catch
|
||||
{
|
||||
@@ -26,5 +43,31 @@ namespace AndroidSideloader
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static void SetLogFilePath(string path)
|
||||
{
|
||||
logFilePath = path;
|
||||
}
|
||||
|
||||
public static void EnableContextualLogging(bool enable)
|
||||
{
|
||||
enableContextualLogging = enable;
|
||||
}
|
||||
|
||||
private static string GetCallerInfo()
|
||||
{
|
||||
System.Diagnostics.StackTrace stackTrace = new System.Diagnostics.StackTrace(true);
|
||||
if (stackTrace.FrameCount >= 3)
|
||||
{
|
||||
var frame = stackTrace.GetFrame(2);
|
||||
var method = frame.GetMethod();
|
||||
string className = method.DeclaringType?.Name;
|
||||
string methodName = method.Name;
|
||||
string callerInfo = $"{className}.{methodName}";
|
||||
return callerInfo;
|
||||
}
|
||||
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -60,11 +60,9 @@ namespace AndroidSideloader.Utilities
|
||||
MessageBoxIcon.Error);
|
||||
}
|
||||
_ = Logger.Log(x.StandardOutput.ReadToEnd());
|
||||
_ = Logger.Log(error, "ERROR");
|
||||
_ = Logger.Log(error, LogLevel.ERROR);
|
||||
throw new ApplicationException($"Extracting failed, status code {x.ExitCode}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user