-
Notifications
You must be signed in to change notification settings - Fork 72
/
LoggerConfigurationApplicationInsightsExtensions.cs
131 lines (119 loc) · 6.36 KB
/
LoggerConfigurationApplicationInsightsExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Copyright 2016 Serilog Contributors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
using Microsoft.ApplicationInsights;
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.Extensibility;
using Serilog.Configuration;
using Serilog.Core;
using Serilog.Events;
using Serilog.Sinks.ApplicationInsights;
using Serilog.Sinks.ApplicationInsights.TelemetryConverters;
namespace Serilog;
/// <summary>
/// Adds the WriteTo.ApplicationInsights() extension method to <see cref="LoggerConfiguration" />.
/// </summary>
public static class LoggerConfigurationApplicationInsightsExtensions
{
/// <summary>
/// Adds a Serilog sink that writes <see cref="LogEvent">log events</see> to Microsoft Application Insights
/// using a custom <see cref="ITelemetry" /> converter / constructor.
/// </summary>
/// <param name="loggerConfiguration">The logger configuration.</param>
/// <param name="telemetryConfiguration">Required Application Insights configuration settings.</param>
/// <param name="telemetryConverter">Required telemetry converter.</param>
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
/// <param name="levelSwitch">Logging level switch for this sink</param>
/// <returns></returns>
public static LoggerConfiguration ApplicationInsights(
this LoggerSinkConfiguration loggerConfiguration,
TelemetryConfiguration telemetryConfiguration,
ITelemetryConverter telemetryConverter,
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
LoggingLevelSwitch levelSwitch = null)
{
#pragma warning disable CS0618
var client = new TelemetryClient(telemetryConfiguration ?? TelemetryConfiguration.Active);
#pragma warning restore CS0618
return loggerConfiguration.Sink(new ApplicationInsightsSink(client, telemetryConverter),
restrictedToMinimumLevel, levelSwitch);
}
/// <summary>
/// Adds a Serilog sink that writes <see cref="LogEvent">log events</see> to Microsoft Application Insights
/// using the active <see cref="TelemetryConfiguration" />
/// </summary>
/// <param name="loggerConfiguration">The logger configuration.</param>
/// <param name="telemetryConverter">Required telemetry converter.</param>
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
/// <param name="levelSwitch">Logging level switch for this sink</param>
/// <returns></returns>
public static LoggerConfiguration ApplicationInsights(
this LoggerSinkConfiguration loggerConfiguration,
ITelemetryConverter telemetryConverter,
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
LoggingLevelSwitch levelSwitch = null)
{
#pragma warning disable CS0618
var client = new TelemetryClient(TelemetryConfiguration.Active);
#pragma warning restore CS0618
return loggerConfiguration.Sink(new ApplicationInsightsSink(client, telemetryConverter),
restrictedToMinimumLevel, levelSwitch);
}
/// <summary>
/// Adds a Serilog sink that writes <see cref="LogEvent">log events</see> to Microsoft Application Insights
/// using a custom <see cref="ITelemetry" /> converter / constructor.
/// </summary>
/// <param name="loggerConfiguration">The logger configuration.</param>
/// <param name="telemetryClient">Required Application Insights telemetry client.</param>
/// <param name="telemetryConverter">Required telemetry converter.</param>
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
/// <param name="levelSwitch">Logging level switch for this sink</param>
/// <returns></returns>
public static LoggerConfiguration ApplicationInsights(
this LoggerSinkConfiguration loggerConfiguration,
TelemetryClient telemetryClient,
ITelemetryConverter telemetryConverter,
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
LoggingLevelSwitch levelSwitch = null)
{
return loggerConfiguration.Sink(new ApplicationInsightsSink(telemetryClient, telemetryConverter),
restrictedToMinimumLevel, levelSwitch);
}
/// <summary>
/// Adds a Serilog sink that writes <see cref="LogEvent">log events</see> to Microsoft Application Insights
/// using a custom <see cref="ITelemetry" /> converter / constructor. Only use in rare cases when your application
/// doesn't have an already-constructed AI telemetry configuration, which is extremely rare.
/// </summary>
/// <param name="loggerConfiguration">The logger configuration.</param>
/// <param name="connectionString">Required Application Insights connection string.</param>
/// <param name="telemetryConverter">Required telemetry converter.</param>
/// <param name="restrictedToMinimumLevel">The minimum log event level required in order to write an event to the sink.</param>
/// <param name="levelSwitch">Logging level switch for this sink</param>
/// <returns></returns>
public static LoggerConfiguration ApplicationInsights(
this LoggerSinkConfiguration loggerConfiguration,
string connectionString,
ITelemetryConverter telemetryConverter,
LogEventLevel restrictedToMinimumLevel = LevelAlias.Minimum,
LoggingLevelSwitch levelSwitch = null)
{
var config = TelemetryConfiguration.CreateDefault();
if (!string.IsNullOrWhiteSpace(connectionString))
{
config.ConnectionString = connectionString;
}
var client = new TelemetryClient(config);
return loggerConfiguration.Sink(new ApplicationInsightsSink(client, telemetryConverter),
restrictedToMinimumLevel, levelSwitch);
}
}