Skip to content

Instantly share code, notes, and snippets.

@NickBranstein
Last active December 3, 2015 04:07
Show Gist options
  • Select an option

  • Save NickBranstein/3b423d3dd51e2c57a3e1 to your computer and use it in GitHub Desktop.

Select an option

Save NickBranstein/3b423d3dd51e2c57a3e1 to your computer and use it in GitHub Desktop.
NLog Slack Target
public static class Bootstrap
{
private static void BootstrapNLog()
{
var config = new LoggingConfiguration();
var slackTarget = new SlackTarget();
config.AddTarget("slack", slackTarget);
config.LoggingRules.Add(new LoggingRule("*", LogLevel.Warn, slackTarget));
LogManager.Configuration = config;
}
}
public static class RequestHelper
{
public static string MakeJsonPost(string url, string json)
{
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.ExpectContinue = false;
httpClient.DefaultRequestHeaders.ConnectionClose = true;
var stringContent = new StringContent(json);
var response = httpClient.PostAsync(url, stringContent).Result;
try
{
response.EnsureSuccessStatusCode();
}
catch (Exception)
{
throw;
}
return response.Content.ReadAsStringAsync().Result;
}
}
public class SlackPostModel
{
[JsonProperty("text")]
public string Text { get; set; }
}
[Target("Slack")]
public sealed class SlackTarget : TargetWithLayout
{
protected override void Write(LogEventInfo logEvent)
{
var logMessage = Layout.Render(logEvent);
var json = JsonConvert.SerializeObject(new SlackPostModel() {Text = logMessage});
RequestHelper.MakeJsonPost(ConfigurationManager.AppSettings["Slack.HangfireUrl"], json);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment