mirror of
https://github.com/microsoft/PowerToys.git
synced 2024-11-27 14:59:16 +08:00
Fixed name of method in managed logging
This commit is contained in:
parent
25aac6b63d
commit
14f790396a
@ -7,6 +7,7 @@ using System.Diagnostics;
|
|||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
using PowerToys.Interop;
|
using PowerToys.Interop;
|
||||||
|
|
||||||
@ -52,16 +53,18 @@ namespace ManagedCommon
|
|||||||
Trace.AutoFlush = true;
|
Trace.AutoFlush = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
public static void LogError(string message)
|
public static void LogError(string message)
|
||||||
{
|
{
|
||||||
Log(message, Error);
|
Log(message, Error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
public static void LogError(string message, Exception ex)
|
public static void LogError(string message, Exception ex)
|
||||||
{
|
{
|
||||||
if (ex == null)
|
if (ex == null)
|
||||||
{
|
{
|
||||||
LogError(message);
|
Log(message, Error);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -84,26 +87,31 @@ namespace ManagedCommon
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
public static void LogWarning(string message)
|
public static void LogWarning(string message)
|
||||||
{
|
{
|
||||||
Log(message, Warning);
|
Log(message, Warning);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
public static void LogInfo(string message)
|
public static void LogInfo(string message)
|
||||||
{
|
{
|
||||||
Log(message, Info);
|
Log(message, Info);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
public static void LogDebug(string message)
|
public static void LogDebug(string message)
|
||||||
{
|
{
|
||||||
Log(message, Debug);
|
Log(message, Debug);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
public static void LogTrace()
|
public static void LogTrace()
|
||||||
{
|
{
|
||||||
Log(string.Empty, TraceFlag);
|
Log(string.Empty, TraceFlag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
private static void Log(string message, string type)
|
private static void Log(string message, string type)
|
||||||
{
|
{
|
||||||
Trace.WriteLine("[" + DateTime.Now.TimeOfDay + "] [" + type + "] " + GetCallerInfo());
|
Trace.WriteLine("[" + DateTime.Now.TimeOfDay + "] [" + type + "] " + GetCallerInfo());
|
||||||
@ -116,13 +124,39 @@ namespace ManagedCommon
|
|||||||
Trace.Unindent();
|
Trace.Unindent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[MethodImpl(MethodImplOptions.NoInlining)]
|
||||||
private static string GetCallerInfo()
|
private static string GetCallerInfo()
|
||||||
{
|
{
|
||||||
StackTrace stackTrace = new();
|
StackTrace stackTrace = new();
|
||||||
|
|
||||||
var methodName = stackTrace.GetFrame(3)?.GetMethod();
|
var callerMethod = GetCallerMethod(stackTrace);
|
||||||
var className = methodName?.DeclaringType.Name;
|
|
||||||
return className + "::" + methodName?.Name;
|
return $"{callerMethod?.DeclaringType?.Name}::{callerMethod.Name}";
|
||||||
|
}
|
||||||
|
|
||||||
|
private static MethodBase GetCallerMethod(StackTrace stackTrace)
|
||||||
|
{
|
||||||
|
const int topFrame = 3;
|
||||||
|
|
||||||
|
var topMethod = stackTrace.GetFrame(topFrame)?.GetMethod();
|
||||||
|
|
||||||
|
if (topMethod?.Name == nameof(IAsyncStateMachine.MoveNext) && typeof(IAsyncStateMachine).IsAssignableFrom(topMethod?.DeclaringType))
|
||||||
|
{
|
||||||
|
// Async method; return actual method as determined by heuristic:
|
||||||
|
// "Nearest method on stack to async state-machine's MoveNext() in same namespace but in a different type".
|
||||||
|
// There are tighter ways of determining the actual method, but this is good enough and probably faster.
|
||||||
|
for (int deepFrame = topFrame + 1; deepFrame < stackTrace.FrameCount; deepFrame++)
|
||||||
|
{
|
||||||
|
var deepMethod = stackTrace.GetFrame(deepFrame)?.GetMethod();
|
||||||
|
|
||||||
|
if (deepMethod?.DeclaringType != topMethod?.DeclaringType && deepMethod?.DeclaringType?.Namespace == topMethod?.DeclaringType?.Namespace)
|
||||||
|
{
|
||||||
|
return deepMethod;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return topMethod;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user