예제 #1
0
        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/";
        }
예제 #2
0
        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;
        }
예제 #5
0
        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();
        }