Application Insights configuration web API

寵の児 提交于 2020-03-25 18:57:49

问题


I have created a library project for writing logs into ApplicationInsights as well as table storage and is being consumed my different other WebAPI projects. But due to some reason the logs are not getting logged in Application Insights but it works with table storage.

private void AddTelemetryTarget(string instrumentationKey, LoggerEnumerations.LogLevel minLogLevel, LoggingConfiguration config)
        {
            try
            {           ConfigurationItemFactory.Default.Targets.RegisterDefinition("ApplicationInsightsTarget", typeof(ApplicationInsightsTarget));
                ApplicationInsightsTarget aiTarget = new ApplicationInsightsTarget();
                aiTarget.InstrumentationKey = instrumentationKey;
                aiTarget.Name = "ai";
                var wrapper = new AsyncTargetWrapper(aiTarget, 5000, AsyncTargetWrapperOverflowAction.Grow);
                config.AddTarget("TelemetryAsyncWrapper", wrapper);

                //Applying logging rules.
                LoggingRule rule = new LoggingRule("*", ConvertLogType(minLogLevel), aiTarget);
                config.LoggingRules.Add(rule);
            }
            catch
            { }
        }
        private LogLevel ConvertLogType(LoggerEnumerations.LogLevel type)
        {
            switch (type)
            {
                case LoggerEnumerations.LogLevel.Error: return LogLevel.Error;
                case LoggerEnumerations.LogLevel.Info: return LogLevel.Info;
                case LoggerEnumerations.LogLevel.Warn: return LogLevel.Warn;
                default: return LogLevel.Trace;
            }
        }


public async Task Log(string message, LoggerEnumerations.LogLevel type, Dictionary<string, string> customParams, Exception ex = null, bool isPayload = false)
        {
            LogEventInfo eventInfo = PopulateEventInfo(message, type, customParams, ex);
            if (!isPayload)
            {
                _logger.Log(eventInfo);
            }
            else
            {
                _payloadLogger.Log(eventInfo);
            }
        }

        private LogEventInfo PopulateEventInfo(string message, LoggerEnumerations.LogLevel type, Dictionary<string, string> customParams, Exception ex = null)
        {
            LogEventInfo eventInfo = new LogEventInfo();

            eventInfo.Level = ConvertLogType(type);
            eventInfo.Message = message;
            eventInfo.LoggerName = this.GetType().ToString();
            if (ex != null)
            {
                eventInfo.Exception = ex;
            }
            else if (eventInfo.Level == LogLevel.Error)
            {
                eventInfo.Exception = new Exception(message);
            }
            //Adding custom properties to LogEventInfo to display in Application insight 
            if (customParams != null)
            {
                foreach (KeyValuePair<string, string> param in customParams)
                {
                    eventInfo.Properties.Add(param.Key, param.Value);
                }
            }
            return eventInfo;
        }

Version of Nuget packages are

Microsoft.ApplicationInsights.NLogTarget : 2.13.1 NLog : 4.6.8

Thanks


回答1:


I added Application Insights as Connected Services and I removed the Instrumentation Key from ApplicationInsights.config file and when registering the nlog target I used instrumentation key from my web.config file and it started working.



来源:https://stackoverflow.com/questions/60401441/application-insights-configuration-web-api

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!