Sfoglia il codice sorgente

log calling method in logs (#71)

emmauss 8 anni fa
parent
commit
b2668e659c
2 ha cambiato i file con 130 aggiunte e 64 eliminazioni
  1. 129 63
      Ryujinx.Core/Logging.cs
  2. 1 1
      Ryujinx.Core/OsHle/Svc/SvcSystem.cs

+ 129 - 63
Ryujinx.Core/Logging.cs

@@ -2,6 +2,7 @@
 using System;
 using System.Diagnostics;
 using System.IO;
+using System.Runtime.CompilerServices;
 using System.Text;
 
 namespace Ryujinx.Core
@@ -12,15 +13,25 @@ namespace Ryujinx.Core
 
         private const string LogFileName = "Ryujinx.log";
 
-        private static bool EnableInfo    = Config.LoggingEnableInfo;
-        private static bool EnableTrace   = Config.LoggingEnableTrace;
-        private static bool EnableDebug   = Config.LoggingEnableDebug;
-        private static bool EnableWarn    = Config.LoggingEnableWarn;
-        private static bool EnableError   = Config.LoggingEnableError;
-        private static bool EnableFatal   = Config.LoggingEnableFatal;
-        private static bool EnableIpc     = Config.LoggingEnableIpc;
+        private static bool EnableInfo = Config.LoggingEnableInfo;
+        private static bool EnableTrace = Config.LoggingEnableTrace;
+        private static bool EnableDebug = Config.LoggingEnableDebug;
+        private static bool EnableWarn = Config.LoggingEnableWarn;
+        private static bool EnableError = Config.LoggingEnableError;
+        private static bool EnableFatal = Config.LoggingEnableFatal;
+        private static bool EnableIpc = Config.LoggingEnableIpc;
         private static bool EnableLogFile = Config.LoggingEnableLogFile;
 
+        private enum LogLevel
+        {
+            Debug = 1,
+            Error = 2,
+            Fatal = 3,
+            Info = 4,
+            Trace = 5,
+            Warn = 6
+        }
+
         static Logging()
         {
             if (File.Exists(LogFileName)) File.Delete(LogFileName);
@@ -30,14 +41,42 @@ namespace Ryujinx.Core
             ExecutionTime.Start();
         }
 
-        public static string GetExecutionTime()
-        {
-            return ExecutionTime.ElapsedMilliseconds.ToString().PadLeft(8, '0') + "ms";
-        }
+        public static string GetExecutionTime() => ExecutionTime.ElapsedMilliseconds.ToString().PadLeft(8, '0') + "ms";
 
-        private static string WhoCalledMe()
+        private static void LogMessage(LogEntry LogEntry)
         {
-            return new StackTrace().GetFrame(2).GetMethod().Name;
+            ConsoleColor consoleColor = ConsoleColor.White;
+
+            switch (LogEntry.LogLevel)
+            {
+                case LogLevel.Debug:
+                    consoleColor = ConsoleColor.Gray;
+                    break;
+                case LogLevel.Error:
+                    consoleColor = ConsoleColor.Red;
+                    break;
+                case LogLevel.Fatal:
+                    consoleColor = ConsoleColor.Magenta;
+                    break;
+                case LogLevel.Info:
+                    consoleColor = ConsoleColor.White;
+                    break;
+                case LogLevel.Trace:
+                    consoleColor = ConsoleColor.DarkGray;
+                    break;
+                case LogLevel.Warn:
+                    consoleColor = ConsoleColor.Yellow;
+                    break;
+            }
+
+            string Text = $"{LogEntry.ExecutionTime} | {LogEntry.LogLevel.ToString()}  > " +
+                $"{LogEntry.CallingMember}:{LogEntry.CallingLineNumber} > {LogEntry.Message}";
+
+            Console.ForegroundColor = consoleColor;
+            Console.WriteLine(Text.PadLeft(Text.Length + 1, ' '));
+            Console.ResetColor();
+
+            LogFile(Text);
         }
 
         private static void LogFile(string Message)
@@ -51,87 +90,105 @@ namespace Ryujinx.Core
             }
         }
 
-        public static void Info(string Message)
+        public static void Info(string Message,
+                                [CallerMemberName] string CallingMember     = "",
+                                [CallerLineNumber] int    CallingLineNumber = 0)
         {
             if (EnableInfo)
             {
-                string Text = $"{GetExecutionTime()} | INFO  > {Message}";
-
-                Console.ForegroundColor = ConsoleColor.White;
-                Console.WriteLine(Text.PadLeft(Text.Length + 1, ' '));
-                Console.ResetColor();
-
-                LogFile(Text);
+                LogMessage(new LogEntry
+                {
+                    CallingLineNumber   = CallingLineNumber,
+                    CallingMember       = CallingMember,
+                    LogLevel            = LogLevel.Info,
+                    Message             = Message,
+                    ExecutionTime       = GetExecutionTime()
+                });
             }
         }
-
-        public static void Trace(string Message)
+    
+        public static void Trace(string Message,
+                                [CallerMemberName] string CallingMember = "",
+                                [CallerLineNumber] int CallingLineNumber = 0)
         {
             if (EnableTrace)
             {
-                string Text = $"{GetExecutionTime()} | TRACE > {WhoCalledMe()} - {Message}";
-
-                Console.ForegroundColor = ConsoleColor.DarkGray;
-                Console.WriteLine(Text.PadLeft(Text.Length + 1, ' '));
-                Console.ResetColor();
-
-                LogFile(Text);
+                LogMessage(new LogEntry
+                {
+                    CallingLineNumber   = CallingLineNumber,
+                    CallingMember       = CallingMember,
+                    LogLevel            = LogLevel.Trace,
+                    Message             = Message,
+                    ExecutionTime       = GetExecutionTime()
+                });
             }
         }
 
-        public static void Debug(string Message)
+        public static void Debug(string Message,
+                                [CallerMemberName] string CallingMember = "",
+                                [CallerLineNumber] int CallingLineNumber = 0)
         {
             if (EnableDebug)
             {
-                string Text = $"{GetExecutionTime()} | DEBUG > {WhoCalledMe()} - {Message}";
-
-                Console.ForegroundColor = ConsoleColor.Gray;
-                Console.WriteLine(Text.PadLeft(Text.Length + 1, ' '));
-                Console.ResetColor();
-
-                LogFile(Text);
+                LogMessage(new LogEntry
+                {
+                    CallingLineNumber   = CallingLineNumber,
+                    CallingMember       = CallingMember,
+                    LogLevel            = LogLevel.Debug,
+                    Message             = Message,
+                    ExecutionTime       = GetExecutionTime()
+                });
             }
         }
 
-        public static void Warn(string Message)
+        public static void Warn(string Message,
+                                [CallerMemberName] string CallingMember = "",
+                                [CallerLineNumber] int CallingLineNumber = 0)
         {
             if (EnableWarn)
             {
-                string Text = $"{GetExecutionTime()} | WARN  > {WhoCalledMe()} - {Message}";
-
-                Console.ForegroundColor = ConsoleColor.Yellow;
-                Console.WriteLine(Text.PadLeft(Text.Length + 1, ' '));
-                Console.ResetColor();
-
-                LogFile(Text);
+                LogMessage(new LogEntry
+                {
+                    CallingLineNumber   = CallingLineNumber,
+                    CallingMember       = CallingMember,
+                    LogLevel            = LogLevel.Warn,
+                    Message             = Message,
+                    ExecutionTime       = GetExecutionTime()
+                });
             }
         }
 
-        public static void Error(string Message)
+        public static void Error(string Message,
+                                [CallerMemberName] string CallingMember = "",
+                                [CallerLineNumber] int CallingLineNumber = 0)
         {
             if (EnableError)
             {
-                string Text = $"{GetExecutionTime()} | ERROR > {WhoCalledMe()} - {Message}";
-
-                Console.ForegroundColor = ConsoleColor.Red;
-                Console.WriteLine(Text.PadLeft(Text.Length + 1, ' '));
-                Console.ResetColor();
-
-                LogFile(Text);
+                LogMessage(new LogEntry
+                {
+                    CallingLineNumber   = CallingLineNumber,
+                    CallingMember       = CallingMember,
+                    LogLevel            = LogLevel.Error,
+                    Message             = Message,
+                    ExecutionTime       = GetExecutionTime()
+                });
             }
         }
 
-        public static void Fatal(string Message)
+        public static void Fatal(string Message,
+                                [CallerMemberName] string CallingMember = "",
+                                [CallerLineNumber] int CallingLineNumber = 0)
         {
             if (EnableFatal)
             {
-                string Text = $"{GetExecutionTime()} | FATAL > {WhoCalledMe()} - {Message}";
-
-                Console.ForegroundColor = ConsoleColor.Magenta;
-                Console.WriteLine(Text.PadLeft(Text.Length + 1, ' '));
-                Console.ResetColor();
-
-                LogFile(Text);
+                LogMessage(new LogEntry
+                {
+                    CallingLineNumber   = CallingLineNumber,
+                    CallingMember       = CallingMember,
+                    LogLevel            = LogLevel.Fatal,
+                    Message             = Message,
+                    ExecutionTime       = GetExecutionTime()
+                });
             }
         }
 
@@ -208,5 +265,14 @@ namespace Ryujinx.Core
             }
             return result.ToString();
         }
-    }
+
+        private struct LogEntry
+        {           
+            public string   CallingMember;
+            public string   ExecutionTime;
+            public string   Message;
+            public int      CallingLineNumber;
+            public LogLevel LogLevel;
+        }
+    }    
 }

+ 1 - 1
Ryujinx.Core/OsHle/Svc/SvcSystem.cs

@@ -221,7 +221,7 @@ namespace Ryujinx.Core.OsHle.Svc
 
             string Str = AMemoryHelper.ReadAsciiString(Memory, Position, Size);
 
-            Logging.Info($"SvcOutputDebugString: {Str}");
+            Logging.Info(Str);
 
             ThreadState.X0 = 0;
         }