public SmtuScheduleApplication(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { Logger = new InMemoryLogger(); Logger.Log( "Shults.SmtuSchedule version {0}, running on {1} {2} (Android {4} – API {3}).", GetVersionName(), Build.Manufacturer, Build.Model, Build.VERSION.SdkInt, Build.VERSION.Release ); // В AndroidEnvironment.UnhandledExceptionRaiser трассировка стека подробнее, // чем в AppDomain.CurrentDomain.UnhandledException. AndroidEnvironment.UnhandledExceptionRaiser += (s, e) => { Logger.Log(e.Exception); // WaitAny используется для подавления исключения, которое может возникнуть // при сохранении лога. Если не подавить его, в AppCenter не придет // краш репорт с исключением-первопричиной. Task.WaitAny(SaveLogAsync(true)); }; Preferences = new Preferences(this); IsInitialized = false; _logsDirectoryPath = GetModernExternalStoragePath() + "/Logs/"; }
public ScheduleApplication(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { Logger = new InMemoryLogger(); Logger.Log( "SmtuSchedule version {0}, running on {1} {2} (Android {4} – API {3}).", GetVersion(), Build.Manufacturer, Build.Model, Build.VERSION.Sdk, Build.VERSION.Release ); // У AndroidEnvironment.UnhandledExceptionRaiser трассировка стека подробнее, // чем у AppDomain.CurrentDomain.UnhandledException. AndroidEnvironment.UnhandledExceptionRaiser += (s, e) => { Logger.Log(e.Exception); SaveLog(true); Crashes.TrackError(e.Exception); }; Preferences = new Preferences(this); IsInitialized = false; }
public void LoggedEventsCanBeRetrieved() { var logger = new InMemoryLogger(); var logEvent = LogEvent.OfSeverity(Severity.Error); logger.Log(logEvent); Assert.Equal(1, logger.Events.Count); Assert.Equal(logEvent, logger.Events[0]); }
private void PreInitialize() { Logger = new InMemoryLogger(); Logger.Log( "SmtuSchedule version {0}, running on {1} {2} (Android {4} – API {3}).", GetVersion(), Build.Manufacturer, Build.Model, Build.VERSION.Sdk, Build.VERSION.Release ); // У AndroidEnvironment.UnhandledExceptionRaiser трассировка стека подробнее, // чем у AppDomain.CurrentDomain.UnhandledException. AndroidEnvironment.UnhandledExceptionRaiser += (s, a) => { Logger.Log(a.Exception); SaveLog(true); }; IsInitialized = false; }
public void log_inserts_log_event_into_buffer() { var time = DateTime.Now; var msg = "This is the message"; var evt = new LogEvent { Level = LogLevel.Fatal, DateTime = time, Message = msg }; var logger = new InMemoryLogger(); logger.Logs.Count.ShouldBe(0); logger.Log(evt); var entry = logger.Logs[0]; entry.ShouldNotBeNull(); entry.Exception.ShouldBeNull(); entry.DateTime.ShouldBe(time); entry.Level.ShouldBe(LogLevel.Fatal); entry.Message.Equals(msg).ShouldBeTrue(); }