/// <summary> /// Log a message /// </summary> /// <param name="message">message to log</param> /// <param name="methodName">calling method</param> /// <param name="level">severity level</param> public void Log(String message, String methodName, Severity.Level level = Severity.Level.Trace) { if (GardenGateway.Files == null) { return; } if (level > Level) { return; } // prepare logging details if (InstanceNameFunc != null) { InstanceName = InstanceNameFunc.Invoke(); } // build log line appendWithBrackets(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss,fff")); appendWithBrackets(level.ToString()); appendWithBrackets(ThreadName); appendWithBrackets(ClassName); appendWithBrackets(InstanceName); appendWithBrackets(methodName); StringCache.Append(" - " + message); // rotate log files if this one's too long // how would this work if we're reusing an existing file? Count the lines first? /* * if (s_Line >= s_MaxLinesPerFile) { * //s_FileManager.doneUsing(s_FileName); * s_FileName = "log - " + DateTime.Now.ToString("yyyy-MM-dd-HH:mm:ss"); * //s_FileManager.startUsing(s_FileName); * s_Line = 1; * } **/ GardenGateway.Files.writeLine(StringCache.ToString(), FileName); StringCache.Clear(); if (ModInfo.DebugMode && level == Severity.Level.Warning || level == Severity.Level.Error || level == Severity.Level.Fatal) { new Notifications.AlertNotification { Text = String.Format("{0} in {1} - {2}", level, ClassName, InstanceName), Color = VRage.Game.MyFontEnum.Red, DisplaySeconds = 5 }.Raise(); } }
public static void ProfileLog( string message, Severity.Level level = Severity.Level.TRACE, string context = null, string primaryState = null, string secondaryState = null, bool condition = true, Assembly assembly = null, [CallerFilePath] string filePath = null, [CallerMemberName] string member = null, [CallerLineNumber] int line = 0 ) { assembly = (assembly != null) ? assembly : Assembly.GetCallingAssembly(); Log(message, level, context, primaryState, secondaryState, condition, assembly, filePath, member, line); }
public LogItem( string message, Severity.Level level, string context, string primaryState, string secondaryState, Assembly assembly, string filePath, string member, int line ) { Assembly = assembly; Context = (context != null) ? context : String.Empty; FileName = Path.GetFileName(filePath); Level = level; Line = line; Member = (member != null) ? member : String.Empty; Message = (message != null) ? message : String.Empty; PrimaryState = (primaryState != null) ? primaryState : String.Empty; SecondaryState = (secondaryState != null) ? secondaryState : String.Empty; Thread = (ThreadTracker.ThreadName != null) ? ThreadTracker.ThreadName : ThreadTracker.ThreadNumber.ToString(); Time = DateTime.Now; }
public static void DebugLogCallStack( Severity.Level level = Severity.Level.TRACE, string context = null, string primaryState = null, string secondaryState = null, bool condition = true, Assembly assembly = null, [CallerFilePath] string filePath = null, [CallerMemberName] string member = null, [CallerLineNumber] int line = 0 ) { if (condition) { StringBuilder builder = new StringBuilder(255); AppendStack(builder, new StackTrace(), typeof(Logger)); var message = builder.ToString(); assembly = (assembly != null) ? assembly : Assembly.GetCallingAssembly(); Log(new LogItem(message, level, context, primaryState, secondaryState, assembly, filePath, member, line)); } }
public static void DebugNotify(string message, int disappearTimeMs = 2000, Severity.Level level = Severity.Level.TRACE) { Notify(message, disappearTimeMs, level); }
/// <summary> /// Display a HUD notification, thread-safe and error-handled. /// </summary> public static void Notify(string message, int disappearTimeMs = 2000, Severity.Level level = Severity.Level.TRACE) { Notify(message, disappearTimeMs, Severity.FontForLevel(level)); }
public void Debug(string toLog, Severity.Level level = Severity.Level.TRACE, bool condition = true, [CallerFilePath] string filePath = null, [CallerMemberName] string member = null, [CallerLineNumber] int lineNumber = 0) { LogWithContext(toLog, level, condition, filePath, member, lineNumber); }
private void LogWithContext(string message, Severity.Level level, bool condition, string filePath, string member, int lineNumber) { Logger.Log(message, level, Context, PrimaryState, SecondaryState, condition, CallerAssembly, filePath, member, lineNumber); }
public void Debug(Func <string> toLog, Severity.Level level = Severity.Level.DEBUG, bool condition = true, [CallerFilePath] string filePath = null, [CallerMemberName] string member = null, [CallerLineNumber] int lineNumber = 0) { LogWithContext(toLog.Invoke(), level, condition, filePath, member, lineNumber); }