Skip to content

Commit ad1e4e7

Browse files
committed
Fixing bug with ILoggerFactory resolution (#1525)
1 parent 6b2cb26 commit ad1e4e7

File tree

4 files changed

+29
-31
lines changed

4 files changed

+29
-31
lines changed

sample/host.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@
1616
},
1717
"swagger": {
1818
"enabled": true
19-
}
19+
},
20+
"functionTimeout": "00:05:00"
2021
}

src/WebJobs.Script.WebHost/App_Start/AutofacBootstrap.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ public static class AutofacBootstrap
1616
internal static void Initialize(ScriptSettingsManager settingsManager, ContainerBuilder builder, WebHostSettings settings)
1717
{
1818
builder.RegisterInstance(settingsManager);
19+
builder.RegisterInstance(settings);
1920

2021
builder.RegisterType<WebHostResolver>().SingleInstance();
21-
2222
builder.RegisterType<DefaultSecretManagerFactory>().As<ISecretManagerFactory>().SingleInstance();
2323
builder.RegisterType<ScriptEventManager>().As<IScriptEventManager>().SingleInstance();
2424

@@ -30,8 +30,7 @@ internal static void Initialize(ScriptSettingsManager settingsManager, Container
3030
builder.Register<WebScriptHostManager>(ct => ct.Resolve<WebHostResolver>().GetWebScriptHostManager(settings)).ExternallyOwned();
3131
builder.Register<WebHookReceiverManager>(ct => ct.Resolve<WebHostResolver>().GetWebHookReceiverManager(settings)).ExternallyOwned();
3232
builder.Register<HostPerformanceManager>(ct => ct.Resolve<WebHostResolver>().GetPerformanceManager(settings)).ExternallyOwned();
33-
builder.Register<ILoggerFactory>(ct => ct.ResolveOptional<WebScriptHostManager>()?.Instance.ScriptConfig.HostConfig.LoggerFactory).ExternallyOwned();
34-
builder.RegisterInstance(settings);
33+
builder.Register<ILoggerFactory>(ct => ct.Resolve<WebHostResolver>().GetScriptHostConfiguration(settings).HostConfig.LoggerFactory).ExternallyOwned();
3534
}
3635
}
3736
}

src/WebJobs.Script.WebHost/WebScriptHostManager.cs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,6 @@ public WebScriptHostManager(ScriptHostConfiguration config,
7777
}
7878

7979
config.IsSelfHost = webHostSettings.IsSelfHost;
80-
if (config.HostConfig.LoggerFactory == null)
81-
{
82-
config.HostConfig.LoggerFactory = new LoggerFactory();
83-
}
8480

8581
_performanceManager = new HostPerformanceManager(settingsManager, config.TraceWriter);
8682
_swaggerDocumentManager = new SwaggerDocumentManager(config);

src/WebJobs.Script/Host/ScriptHost.cs

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -266,30 +266,38 @@ protected virtual void Initialize()
266266
File.WriteAllText(hostConfigFilePath, "{}");
267267
}
268268

269-
if (ScriptConfig.HostConfig.IsDevelopment || InDebugMode)
269+
var hostConfig = ScriptConfig.HostConfig;
270+
if (hostConfig.IsDevelopment || InDebugMode)
270271
{
271272
// If we're in debug/development mode, use optimal debug settings
272-
ScriptConfig.HostConfig.UseDevelopmentSettings();
273+
hostConfig.UseDevelopmentSettings();
274+
}
275+
276+
// Ensure we always have an ILoggerFactory,
277+
// regardless of whether AppInsights is registered or not
278+
if (hostConfig.LoggerFactory == null)
279+
{
280+
hostConfig.LoggerFactory = new LoggerFactory();
273281
}
274282

275283
string json = File.ReadAllText(hostConfigFilePath);
276-
JObject hostConfig;
284+
JObject hostConfigObject;
277285
try
278286
{
279-
hostConfig = JObject.Parse(json);
287+
hostConfigObject = JObject.Parse(json);
280288
}
281289
catch (JsonException ex)
282290
{
283291
throw new FormatException(string.Format("Unable to parse {0} file.", ScriptConstants.HostMetadataFileName), ex);
284292
}
285293

286-
ApplyConfiguration(hostConfig, ScriptConfig);
294+
ApplyConfiguration(hostConfigObject, ScriptConfig);
287295

288-
if (string.IsNullOrEmpty(ScriptConfig.HostConfig.HostId))
296+
if (string.IsNullOrEmpty(hostConfig.HostId))
289297
{
290-
ScriptConfig.HostConfig.HostId = Utility.GetDefaultHostId(_settingsManager, ScriptConfig);
298+
hostConfig.HostId = Utility.GetDefaultHostId(_settingsManager, ScriptConfig);
291299
}
292-
if (string.IsNullOrEmpty(ScriptConfig.HostConfig.HostId))
300+
if (string.IsNullOrEmpty(hostConfig.HostId))
293301
{
294302
throw new InvalidOperationException("An 'id' must be specified in the host configuration.");
295303
}
@@ -299,9 +307,9 @@ protected virtual void Initialize()
299307
var traceMonitor = new TraceMonitor()
300308
.Filter(p => { return true; })
301309
.Subscribe(HandleHostError);
302-
ScriptConfig.HostConfig.Tracing.Tracers.Add(traceMonitor);
310+
hostConfig.Tracing.Tracers.Add(traceMonitor);
303311

304-
TraceLevel hostTraceLevel = ScriptConfig.HostConfig.Tracing.ConsoleLevel;
312+
TraceLevel hostTraceLevel = hostConfig.Tracing.ConsoleLevel;
305313
if (ScriptConfig.FileLoggingMode != FileLoggingMode.Never)
306314
{
307315
// Host file logging is only done conditionally
@@ -321,7 +329,7 @@ protected virtual void Initialize()
321329

322330
if (TraceWriter != null)
323331
{
324-
ScriptConfig.HostConfig.Tracing.Tracers.Add(TraceWriter);
332+
hostConfig.Tracing.Tracers.Add(TraceWriter);
325333
}
326334
else
327335
{
@@ -333,8 +341,8 @@ protected virtual void Initialize()
333341

334342
// Use the startupLogger in this class as it is concerned with startup. The public Logger is used
335343
// for all other logging after startup.
336-
_startupLogger = ScriptConfig.HostConfig.LoggerFactory.CreateLogger(LogCategories.Startup);
337-
Logger = ScriptConfig.HostConfig.LoggerFactory.CreateLogger(ScriptConstants.LogCategoryHostGeneral);
344+
_startupLogger = hostConfig.LoggerFactory.CreateLogger(LogCategories.Startup);
345+
Logger = hostConfig.LoggerFactory.CreateLogger(ScriptConstants.LogCategoryHostGeneral);
338346

339347
_debugModeFileWatcher = new AutoRecoveringFileSystemWatcher(hostLogPath, ScriptConstants.DebugSentinelFileName,
340348
includeSubdirectories: false, changeTypes: WatcherChangeTypes.Created | WatcherChangeTypes.Changed);
@@ -346,15 +354,15 @@ protected virtual void Initialize()
346354
if (storageString == null)
347355
{
348356
// Disable core storage
349-
ScriptConfig.HostConfig.StorageConnectionString = null;
357+
hostConfig.StorageConnectionString = null;
350358
blobManagerCreation = Task.FromResult<BlobLeaseManager>(null);
351359
}
352360
else
353361
{
354-
blobManagerCreation = BlobLeaseManager.CreateAsync(storageString, TimeSpan.FromSeconds(15), ScriptConfig.HostConfig.HostId, InstanceId, TraceWriter, ScriptConfig.HostConfig.LoggerFactory);
362+
blobManagerCreation = BlobLeaseManager.CreateAsync(storageString, TimeSpan.FromSeconds(15), hostConfig.HostId, InstanceId, TraceWriter, hostConfig.LoggerFactory);
355363
}
356364

357-
var bindingProviders = LoadBindingProviders(ScriptConfig, hostConfig, TraceWriter, _startupLogger);
365+
var bindingProviders = LoadBindingProviders(ScriptConfig, hostConfigObject, TraceWriter, _startupLogger);
358366
ScriptConfig.BindingProviders = bindingProviders;
359367

360368
string message = string.Format(CultureInfo.InvariantCulture, "Reading host configuration file '{0}'", hostConfigFilePath);
@@ -428,7 +436,7 @@ protected virtual void Initialize()
428436
List<Type> types = new List<Type>();
429437
types.Add(type);
430438

431-
ScriptConfig.HostConfig.TypeLocator = new TypeLocator(types);
439+
hostConfig.TypeLocator = new TypeLocator(types);
432440

433441
Functions = functions;
434442

@@ -518,12 +526,6 @@ private void LoadExtension(IExtensionConfigProvider instance, string locationHin
518526
internal static void ConfigureLoggerFactory(ScriptHostConfiguration scriptConfig,
519527
ScriptSettingsManager settingsManager, IMetricsLogger metrics, Func<bool> isFileLoggingEnabled)
520528
{
521-
// We always want an ILoggerFactory, whether app insights is registered or not
522-
if (scriptConfig.HostConfig.LoggerFactory == null)
523-
{
524-
scriptConfig.HostConfig.LoggerFactory = new LoggerFactory();
525-
}
526-
527529
// Register a file logger that only logs user logs and only if file logging is enabled
528530
scriptConfig.HostConfig.LoggerFactory.AddProvider(new FileLoggerProvider(scriptConfig,
529531
(category, level) => (category == LogCategories.Function) && isFileLoggingEnabled()));

0 commit comments

Comments
 (0)