-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathRainMeadow.Logging.cs
67 lines (61 loc) · 3.06 KB
/
RainMeadow.Logging.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Runtime.CompilerServices;
using UnityEngine;
namespace RainMeadow
{
public class InvalidProgrammerException : InvalidOperationException
{
public InvalidProgrammerException(string message) : base(message + " you goof") { }
}
public partial class RainMeadow
{
private static string TrimCaller(string callerFile) { return (callerFile = callerFile.Substring(Mathf.Max(callerFile.LastIndexOf(Path.DirectorySeparatorChar), callerFile.LastIndexOf(Path.AltDirectorySeparatorChar)) + 1)).Substring(0, callerFile.LastIndexOf('.')); }
private static string LogTime() { return ((int)(Time.time * 1000)).ToString(); }
private static string LogDOT() { return DateTime.Now.ToUniversalTime().TimeOfDay.ToString().Substring(0, 8); }
public static void Debug(object data, [CallerFilePath] string callerFile = "", [CallerMemberName] string callerName = "")
{
instance.Logger.LogInfo($"{LogDOT()}|{LogTime()}|{TrimCaller(callerFile)}.{callerName}:{data}");
}
public static void DebugMe([CallerFilePath] string callerFile = "", [CallerMemberName] string callerName = "")
{
instance.Logger.LogInfo($"{LogDOT()}|{LogTime()}|{TrimCaller(callerFile)}.{callerName}");
}
public static void Error(object data, [CallerFilePath] string callerFile = "", [CallerMemberName] string callerName = "")
{
instance.Logger.LogError($"{LogDOT()}|{LogTime()}|{TrimCaller(callerFile)}.{callerName}:{data}");
}
[Conditional("TRACING")]
public static void Stacktrace()
{
var stacktrace = Environment.StackTrace;
stacktrace = stacktrace.Substring(stacktrace.IndexOf('\n') + 1);
stacktrace = stacktrace.Substring(stacktrace.IndexOf('\n'));
instance.Logger.LogInfo(stacktrace);
}
[Conditional("TRACING")]
public static void Dump(object data, [CallerFilePath] string callerFile = "", [CallerMemberName] string callerName = "")
{
var dump = JsonConvert.SerializeObject(data, Formatting.Indented, new JsonSerializerSettings
{
ContractResolver = ShallowJsonDump.customResolver,
Converters = new List<JsonConverter>() { new ShallowJsonDump() }
});
instance.Logger.LogInfo($"{LogDOT()}|{LogTime()}|{TrimCaller(callerFile)}.{callerName}:{dump}");
}
// tracing stays on for one net-frame after pressing L
public static bool tracing;
// this better captures the caller member info for delegates/lambdas at the cost of using the stackframe
[Conditional("TRACING")]
public static void Trace(object data, [CallerFilePath] string callerFile = "")
{
if (tracing)
{
instance.Logger.LogInfo($"{LogDOT()}|{LogTime()}|{TrimCaller(callerFile)}.{new StackFrame(1, false).GetMethod()}:{data}");
}
}
}
}