コード例 #1
0
        public void Log_Error_EmitsExpectedEvent()
        {
            Exception ex = new Exception("Kaboom");

            string message = "TestMessage";
            string functionInvocationId = Guid.NewGuid().ToString();
            string activityId           = Guid.NewGuid().ToString();

            string properties = null;

            _mockEventGenerator.Setup(p => p.LogAzureMonitorDiagnosticLogEvent(LogLevel.Error, _websiteHostName, AzureMonitorDiagnosticLogger.AzureMonitorOperationName, AzureMonitorDiagnosticLogger.AzureMonitorCategoryName, _regionName, It.IsAny <string>()))
            .Callback <LogLevel, string, string, string, string, string>((t, r, o, c, l, p) =>
            {
                // Store off the properties for later validation
                properties = p;
            });

            // use no scope
            using (CreateScope())
            {
                _logger.LogError(ex, message);
            }

            _mockEventGenerator.VerifyAll();

            var level = LogLevel.Error;

            JObject actual   = JObject.Parse(properties);
            JObject expected = JObject.FromObject(new
            {
                appName          = _appServiceOptionsWrapper.CurrentValue.AppName,
                roleInstance     = _roleInstance,
                exceptionType    = ex.GetType().ToString(),
                exceptionMessage = ex.Message,
                exceptionDetails = ex.ToFormattedString(),
                message,
                category       = _category,
                hostInstanceId = _hostInstanceId,
                hostVersion    = ScriptHost.Version,
                level          = level.ToString(),
                levelId        = (int)level,
                processId      = _processId
            });

            Assert.True(JToken.DeepEquals(actual, expected), $"Actual: {actual.ToString()}{Environment.NewLine}Expected: {expected.ToString()}");
        }