public bool Add(string message, BreadcrumbLevel type, UnityEngineLogLevel level, IDictionary <string, string> attributes) { lock (_lockObject) { if (Breadcrumbs.Count + 1 > MaximumNumberOfBreadcrumbs) { while (Breadcrumbs.Count + 1 > MaximumNumberOfBreadcrumbs) { Breadcrumbs.Dequeue(); } } } Breadcrumbs.Enqueue(new InMemoryBreadcrumb() { Message = message, Timestamp = DateTimeHelper.TimestampMs(), Level = level, Type = type, Attributes = attributes }); _breadcrumbId++; return(true); }
/// <summary> /// Adds breadcrumb entry to the breadcrumbs file. /// </summary> /// <param name="message">Breadcrumb message</param> /// <param name="level">Breadcrumb level</param> /// <param name="type">Breadcrumb type</param> /// <param name="attributes">Breadcrumb attributs</param> /// <returns>True if breadcrumb was stored in the breadcrumbs file. Otherwise false.</returns> public bool Add(string message, BreadcrumbLevel level, UnityEngineLogLevel type, IDictionary <string, string> attributes) { byte[] bytes; lock (_lockObject) { double id = _breadcrumbId++; var jsonObject = CreateBreadcrumbJson(id, message, level, type, attributes); bytes = System.Text.Encoding.UTF8.GetBytes(jsonObject.ToJson()); if (currentSize + bytes.Length > BreadcrumbsSize) { try { ClearOldLogs(); } catch (Exception) { return(false); } } } try { return(AppendBreadcrumb(bytes)); } catch (Exception e) { System.Diagnostics.Debug.WriteLine(string.Format("Cannot append data to the breadcrumbs file. Reason: {0}", e.Message)); return(false); } }
internal bool ShouldLog(UnityEngineLogLevel type) { if (!BreadcrumbsLevel.HasFlag(BacktraceBreadcrumbType.Manual)) { return(false); } return(UnityLogLevel.HasFlag(type)); }
internal bool AddBreadcrumbs(string message, BreadcrumbLevel level, UnityEngineLogLevel type, IDictionary <string, string> attributes = null) { if (!BreadcrumbsLevel.HasFlag((BacktraceBreadcrumbType)level)) { return(false); } return(LogManager.Add(message, level, type, attributes)); }
public void TestLogLogs_ShouldEnableThem_EventsAreSet() { var inMemoryBreadcrumbStorage = new BacktraceInMemoryLogManager(); var breadcrumbsManager = new BacktraceBreadcrumbs(inMemoryBreadcrumbStorage); UnityEngineLogLevel level = UnityEngineLogLevel.Debug | UnityEngineLogLevel.Error | UnityEngineLogLevel.Fatal | UnityEngineLogLevel.Info | UnityEngineLogLevel.Warning; breadcrumbsManager.EnableBreadcrumbs(BacktraceBreadcrumbType.Log, level); Assert.IsTrue(breadcrumbsManager.EventHandler.HasRegisteredEvents); breadcrumbsManager.UnregisterEvents(); }
public void TestManualLogs_ShouldFilterAllManualLogs_BreadcrumbsWasntSaved(LogType testedLevel) { const string message = "message"; const int expectedNumberOfLogs = 0; var inMemoryBreadcrumbStorage = new BacktraceInMemoryLogManager(); var breadcrumbsManager = new BacktraceBreadcrumbs(inMemoryBreadcrumbStorage); //anything else than Manual var breadcrumbType = BacktraceBreadcrumbType.Configuration; UnityEngineLogLevel level = UnityEngineLogLevel.Debug | UnityEngineLogLevel.Error | UnityEngineLogLevel.Fatal | UnityEngineLogLevel.Info | UnityEngineLogLevel.Warning; breadcrumbsManager.EnableBreadcrumbs(breadcrumbType, level); var result = breadcrumbsManager.Log(message, testedLevel); Assert.IsFalse(result); Assert.AreEqual(expectedNumberOfLogs, inMemoryBreadcrumbStorage.Breadcrumbs.Count); }
public bool EnableBreadcrumbs(BacktraceBreadcrumbType level, UnityEngineLogLevel unityLogLevel) { if (_enabled) { return(false); } BreadcrumbsLevel = level; UnityLogLevel = unityLogLevel; var breadcrumbStorageEnabled = LogManager.Enable(); if (!breadcrumbStorageEnabled) { return(false); } EventHandler.Register(level); return(true); }
/// <summary> /// Convert diagnostic data to JSON format /// </summary> /// <param name="id">Breadcrumbs id</param> /// <param name="message">breadcrumbs message</param> /// <param name="level">Breadcrumb level</param> /// <param name="type">Breadcrumb type</param> /// <param name="attributes">Breadcrumb attributes</param> /// <returns>JSON object</returns> private BacktraceJObject CreateBreadcrumbJson( double id, string message, BreadcrumbLevel level, UnityEngineLogLevel type, IDictionary <string, string> attributes) { var jsonObject = new BacktraceJObject(); // breadcrumbs integration accepts timestamp in ms not in sec. jsonObject.Add("timestamp", DateTimeHelper.TimestampMs(), "F0"); jsonObject.Add("id", id, "F0"); jsonObject.Add("type", Enum.GetName(typeof(BreadcrumbLevel), level).ToLower()); jsonObject.Add("level", Enum.GetName(typeof(UnityEngineLogLevel), type).ToLower()); jsonObject.Add("message", message); if (attributes != null && attributes.Count > 0) { jsonObject.Add("attributes", new BacktraceJObject(attributes)); } return(jsonObject); }