Skip to content

Commit 1207f9d

Browse files
committed
warmup AzureMonitorDiagnosticLogger in placeholder mode
1 parent 0086b39 commit 1207f9d

File tree

4 files changed

+39
-23
lines changed

4 files changed

+39
-23
lines changed

src/WebJobs.Script.WebHost/Diagnostics/AzureMonitorDiagnosticLogger.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ public AzureMonitorDiagnosticLogger(string category, string hostInstanceId, IEve
4040

4141
public bool IsEnabled(LogLevel logLevel)
4242
{
43-
return true;
43+
// We want to instantiate this Logger in placeholder mode to warm it up, but do not want to log anything.
44+
return !string.IsNullOrEmpty(_websiteHostName) && !_environment.IsPlaceholderModeEnabled();
4445
}
4546

4647
public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter)

src/WebJobs.Script.WebHost/WebScriptHostBuilderExtension.cs

Lines changed: 1 addition & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
using Microsoft.Extensions.DependencyInjection.Extensions;
1616
using Microsoft.Extensions.Hosting;
1717
using Microsoft.Extensions.Logging;
18-
using Microsoft.Extensions.Logging.Abstractions;
19-
using Microsoft.Extensions.Options;
2018

2119
namespace Microsoft.Azure.WebJobs.Script.WebHost
2220
{
@@ -52,21 +50,7 @@ public static IHostBuilder AddWebScriptHost(this IHostBuilder builder, IServiceP
5250

5351
loggingBuilder.AddWebJobsSystem<SystemLoggerProvider>();
5452
loggingBuilder.Services.AddSingleton<ILoggerProvider, UserLogMetricsLoggerProvider>();
55-
loggingBuilder.Services.AddSingleton<ILoggerProvider>(services =>
56-
{
57-
IEnvironment environment = services.GetService<IEnvironment>();
58-
IScriptWebHostEnvironment hostEnvironment = services.GetService<IScriptWebHostEnvironment>();
59-
60-
if (!hostEnvironment.InStandbyMode &&
61-
!string.IsNullOrEmpty(environment.GetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteHostName)))
62-
{
63-
IEventGenerator eventGenerator = services.GetService<IEventGenerator>();
64-
IOptions<ScriptJobHostOptions> options = services.GetService<IOptions<ScriptJobHostOptions>>();
65-
return new AzureMonitorDiagnosticLoggerProvider(options, eventGenerator, environment);
66-
}
67-
68-
return NullLoggerProvider.Instance;
69-
});
53+
loggingBuilder.Services.AddSingleton<ILoggerProvider, AzureMonitorDiagnosticLoggerProvider>();
7054

7155
ConfigureRegisteredBuilders(loggingBuilder, rootServiceProvider);
7256
})

test/WebJobs.Script.Tests/Configuration/LoggingConfigurationTests.cs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
using Microsoft.Extensions.DependencyInjection;
1212
using Microsoft.Extensions.Hosting;
1313
using Microsoft.Extensions.Logging;
14-
using Microsoft.Extensions.Logging.Abstractions;
1514
using Microsoft.Extensions.Logging.Console;
1615
using Microsoft.Extensions.Options;
1716
using Microsoft.WebJobs.Script.Tests;
@@ -183,7 +182,7 @@ public void LoggerProviders_Default()
183182
loggerProviders.OfType<HostFileLoggerProvider>().Single();
184183
loggerProviders.OfType<FunctionFileLoggerProvider>().Single();
185184
loggerProviders.OfType<UserLogMetricsLoggerProvider>().Single();
186-
loggerProviders.OfType<NullLoggerProvider>().Single();
185+
loggerProviders.OfType<AzureMonitorDiagnosticLoggerProvider>().Single();
187186
}
188187

189188
[Fact]
@@ -202,7 +201,7 @@ public void LoggerProviders_ConsoleEnabled_IfDevelopmentEnvironment()
202201
loggerProviders.OfType<FunctionFileLoggerProvider>().Single();
203202
loggerProviders.OfType<ConsoleLoggerProvider>().Single();
204203
loggerProviders.OfType<UserLogMetricsLoggerProvider>().Single();
205-
loggerProviders.OfType<NullLoggerProvider>().Single();
204+
loggerProviders.OfType<AzureMonitorDiagnosticLoggerProvider>().Single();
206205
}
207206

208207
[Fact]
@@ -227,7 +226,7 @@ public void LoggerProviders_ConsoleEnabled_InConfiguration()
227226
loggerProviders.OfType<FunctionFileLoggerProvider>().Single();
228227
loggerProviders.OfType<ConsoleLoggerProvider>().Single();
229228
loggerProviders.OfType<UserLogMetricsLoggerProvider>().Single();
230-
loggerProviders.OfType<NullLoggerProvider>().Single();
229+
loggerProviders.OfType<AzureMonitorDiagnosticLoggerProvider>().Single();
231230
}
232231

233232
[Fact]
@@ -252,7 +251,7 @@ public void LoggerProviders_ApplicationInsights()
252251
loggerProviders.OfType<FunctionFileLoggerProvider>().Single();
253252
loggerProviders.OfType<ApplicationInsightsLoggerProvider>().Single();
254253
loggerProviders.OfType<UserLogMetricsLoggerProvider>().Single();
255-
loggerProviders.OfType<NullLoggerProvider>().Single();
254+
loggerProviders.OfType<AzureMonitorDiagnosticLoggerProvider>().Single();
256255
}
257256

258257
[Fact]

test/WebJobs.Script.Tests/Eventing/DiagnosticLoggerTests.cs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,38 @@ public void Log_Sanitizes()
163163
Assert.True(JToken.DeepEquals(actual, expected), $"Actual: {actual.ToString()}{Environment.NewLine}Expected: {expected.ToString()}");
164164
}
165165

166+
[Fact]
167+
public void Log_DisabledIfPlaceholder()
168+
{
169+
string message = "TestMessage";
170+
string functionInvocationId = Guid.NewGuid().ToString();
171+
string activityId = Guid.NewGuid().ToString();
172+
173+
_environment.SetEnvironmentVariable(EnvironmentSettingNames.AzureWebsitePlaceholderMode, "1");
174+
175+
_logger.LogInformation(message);
176+
177+
Assert.False(_logger.IsEnabled(LogLevel.Information));
178+
_mockEventGenerator.Verify(m => m.LogAzureMonitorDiagnosticLogEvent(It.IsAny<LogLevel>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Never);
179+
}
180+
181+
[Fact]
182+
public void Log_DisabledIfNoSiteName()
183+
{
184+
string message = "TestMessage";
185+
string functionInvocationId = Guid.NewGuid().ToString();
186+
string activityId = Guid.NewGuid().ToString();
187+
_environment.SetEnvironmentVariable(EnvironmentSettingNames.AzureWebsiteHostName, null);
188+
189+
// Recreate the logger was we cache the site name in the constructor
190+
ILogger logger = new AzureMonitorDiagnosticLogger(_category, _hostInstanceId, _mockEventGenerator.Object, _environment, new LoggerExternalScopeProvider());
191+
192+
logger.LogInformation(message);
193+
194+
Assert.False(logger.IsEnabled(LogLevel.Information));
195+
_mockEventGenerator.Verify(m => m.LogAzureMonitorDiagnosticLogEvent(It.IsAny<LogLevel>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>(), It.IsAny<string>()), Times.Never);
196+
}
197+
166198
// Creates a scope based on the non-null values passed in. Allows us to test various permutations and make sure that the logger handles them.
167199
private IDisposable CreateScope(string functionName = null, string activityId = null, string functionInvocationId = null)
168200
{

0 commit comments

Comments
 (0)