public void On(Event <LogEventData> evt) { try { if (TraceMessage) { Log .ForContext("Uri", new Uri(TeamsBaseUrl)) .Information("Start Processing {Message}", evt.Data.RenderedMessage); } TeamsCard body = BuildBody(evt); var httpClientHandler = new HttpClientHandler(); if (!string.IsNullOrEmpty(WebProxy)) { httpClientHandler.Proxy = new WebProxy(WebProxy, false); httpClientHandler.UseProxy = true; } else { httpClientHandler.UseProxy = false; } using (var client = new HttpClient(httpClientHandler)) { client.BaseAddress = new Uri(TeamsBaseUrl); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = client.PostAsync( "", new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json") ).Result; if (!response.IsSuccessStatusCode) { Log .ForContext("Uri", response.RequestMessage.RequestUri) .Error("Could not send Teams message, server replied {StatusCode} {StatusMessage}: {Message}", Convert.ToInt32(response.StatusCode), response.StatusCode, response.Content.ReadAsStringAsync().Result); } else { if (TraceMessage) { string reponseResult = response.Content.ReadAsStringAsync().Result; Log .ForContext("Uri", response.RequestMessage.RequestUri) .Information("Server replied {StatusCode} {StatusMessage}: {Message}", Convert.ToInt32(response.StatusCode), response.StatusCode, reponseResult); } } } } catch (Exception ex) { Log .ForContext("Uri", new Uri(TeamsBaseUrl)) .Error(ex, "An error occured while constructing request."); } }
private TeamsCard BuildBody(Event <LogEventData> evt) { // Build action var url = BaseUrl; if (string.IsNullOrWhiteSpace(url)) { url = Host.ListenUris.FirstOrDefault(); } TeamsPotentialAction action = new TeamsPotentialAction() { Name = "Click here to open in Seq", Targets = new[] { new TeamsActionTarget { Uri = $"{url}#/events?filter=@Id%20%3D%3D%20%22{evt.Id}%22&show=expanded" } } }; // Build message var msg = evt.Data.RenderedMessage; if (msg.Length > 1000) { msg = msg.EscapeMarkdown().Substring(0, 1000); } var color = Color; if (string.IsNullOrWhiteSpace(color)) { color = _levelColorMap[evt.Data.Level]; } TeamsCard body = new TeamsCard { Title = evt.Data.Level.ToString().EscapeMarkdown(), ThemeColor = color, Text = msg, PotentialAction = new [] { action } }; // Build sections var sections = new List <TeamsSection>(); if (!ExcludeProperties && evt.Data.Properties != null) { var facts = evt.Data.Properties .Where(i => i.Value != null) .Select(i => new TeamsFact { Name = i.Key, Value = i.Value.ToString().EscapeMarkdown() }) .ToArray(); if (facts.Any()) { sections.Add(new TeamsSection { Facts = facts }); } } if (!string.IsNullOrWhiteSpace(evt.Data.Exception)) { sections.Add(new TeamsSection { Title = "Exception", Text = evt.Data.Exception.EscapeMarkdown() }); } body.Sections = sections.ToArray(); return(body); }