11namespace Giraffe.Website
2+ open Microsoft.AspNetCore .Http
23
34[<RequireQualifiedAccess>]
45module Css =
@@ -325,50 +326,51 @@ module Main =
325326 open Logfella.Adapters
326327 open Logfella.AspNetCore
327328
328- let private googleCloudLogWriter =
329- GoogleCloudLogWriter
330- .Create( Env.logSeverity)
331- .AddServiceContext(
332- Env.appName,
333- Env.appVersion)
334- .UseGoogleCloudTimestamp()
335- .AddLabels(
336- dict [
337- " appName" , Env.appName
338- " appVersion" , Env.appVersion
339- ])
340-
341329 let private muteFilter =
342330 Func< Severity, string, IDictionary< string, obj>, exn, bool>(
343331 fun severity msg data ex ->
344332 msg.StartsWith " The response could not be cached for this request" )
345333
346- let private defaultLogWriter =
347- Mute.When( muteFilter)
348- .Otherwise(
349- match Env.isProduction with
350- | false -> ConsoleLogWriter( Env.logSeverity) .AsLogWriter()
351- | true -> googleCloudLogWriter.AsLogWriter())
334+ let private createLogWriter ( ctx : HttpContext option ) =
335+ match Env.isProduction with
336+ | false -> ConsoleLogWriter( Env.logSeverity) .AsLogWriter()
337+ | true ->
338+ let basic =
339+ GoogleCloudLogWriter
340+ .Create( Env.logSeverity)
341+ .AddServiceContext(
342+ Env.appName,
343+ Env.appVersion)
344+ .UseGoogleCloudTimestamp()
345+ .AddLabels(
346+ dict [
347+ " appName" , Env.appName
348+ " appVersion" , Env.appVersion
349+ ])
350+ let final =
351+ match ctx with
352+ | None -> basic
353+ | Some ctx ->
354+ basic
355+ .AddHttpContext( ctx)
356+ .AddCorrelationId( Guid.NewGuid() .ToString( " N" ))
357+ Mute.When( muteFilter)
358+ .Otherwise( final)
359+
360+ let private createReqLogWriter =
361+ Func< HttpContext, ILogWriter>( Some >> createLogWriter)
362+
363+ let private toggleRequestLogging =
364+ Action< RequestLoggingOptions>(
365+ fun x -> x.IsEnabled <- Env.enableRequestLogging)
352366
353367 let configureApp ( appBuilder : IApplicationBuilder ) =
354368 appBuilder
355369 .UseGiraffeErrorHandler( WebApp.errorHandler)
356- .UseWhen(
357- ( fun _ -> Env.isProduction),
358- fun x ->
359- x.UseRequestScopedLogWriter(
360- fun ctx ->
361- Mute.When( muteFilter)
362- .Otherwise(
363- googleCloudLogWriter
364- .AddHttpContext( ctx)
365- .AddCorrelationId( Guid.NewGuid() .ToString( " N" ))
366- .AsLogWriter()))
367- |> ignore)
368- .UseRequestLogging(
369- fun o -> o.IsEnabled <- Env.enableRequestLogging)
370+ .UseRequestScopedLogWriter( createReqLogWriter)
371+ .UseRequestLogging( toggleRequestLogging)
370372 .UseForwardedHeaders()
371- .UseHttpsRedirection( Env.domainName)
373+ .UseHttpsRedirection( Env.forceHttps , Env. domainName)
372374 .UseTrailingSlashRedirection()
373375 .UseStaticFiles()
374376 .UseResponseCaching()
@@ -394,7 +396,7 @@ module Main =
394396 [<EntryPoint>]
395397 let main args =
396398 try
397- Log.SetDefaultLogWriter( defaultLogWriter )
399+ Log.SetDefaultLogWriter( createLogWriter None )
398400 Logging.outputEnvironmentSummary Env.summary
399401
400402 Host.CreateDefaultBuilder( args)
0 commit comments