Browse Source

Logging fixes.

pull/749/head
Sebastian 4 years ago
parent
commit
dd27344d97
  1. 8
      backend/extensions/Squidex.Extensions/APM/ApplicationInsights/ApplicationInsightsPlugin.cs
  2. 8
      backend/extensions/Squidex.Extensions/APM/Otlp/OtlpPlugin.cs
  3. 43
      backend/extensions/Squidex.Extensions/APM/Stackdriver/StackdriverExceptionHandler.cs
  4. 29
      backend/extensions/Squidex.Extensions/APM/Stackdriver/StackdriverPlugin.cs
  5. 2
      backend/extensions/Squidex.Extensions/Squidex.Extensions.csproj
  6. 4
      backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
  7. 2
      backend/src/Squidex/Squidex.csproj

8
backend/extensions/Squidex.Extensions/APM/ApplicationInsights/ApplicationInsightsPlugin.cs

@ -16,16 +16,16 @@ namespace Squidex.Extensions.APM.ApplicationInsights
{
public void ConfigureServices(IServiceCollection services, IConfiguration config)
{
services.AddOpenTelemetryTracing(builder =>
if (config.GetValue<bool>("logging:applicationInsights:enabled"))
{
if (config.GetValue<bool>("logging:applicationInsights:enabled"))
services.AddOpenTelemetryTracing(builder =>
{
builder.AddAzureMonitorTraceExporter(options =>
{
config.GetSection("logging:applicationInsights").Bind(options);
});
}
});
});
}
}
}
}

8
backend/extensions/Squidex.Extensions/APM/Otlp/OtlpPlugin.cs

@ -17,9 +17,9 @@ namespace Squidex.Extensions.APM.Datadog
{
public void ConfigureServices(IServiceCollection services, IConfiguration config)
{
services.AddOpenTelemetryTracing(builder =>
if (config.GetValue<bool>("logging:otlp:enabled"))
{
if (config.GetValue<bool>("logging:otlp:enabled"))
services.AddOpenTelemetryTracing(builder =>
{
// See: https://docs.microsoft.com/aspnet/core/grpc/troubleshoot#call-insecure-grpc-services-with-net-core-client
AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
@ -28,8 +28,8 @@ namespace Squidex.Extensions.APM.Datadog
{
config.GetSection("logging:otlp").Bind(options);
});
}
});
});
}
}
}
}

43
backend/extensions/Squidex.Extensions/APM/Stackdriver/StackdriverExceptionHandler.cs

@ -6,33 +6,56 @@
// ==========================================================================
using System;
using Google.Cloud.Diagnostics.AspNetCore;
using Google.Cloud.Diagnostics.Common;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;
using Squidex.Infrastructure;
using Squidex.Log;
namespace Squidex.Extensions.APM.Stackdriver
{
internal class StackdriverExceptionHandler : ILogAppender
internal sealed class StackdriverExceptionHandler : ILogAppender
{
private readonly DefaultHttpContext fallbackContext = new DefaultHttpContext();
private readonly IExceptionLogger logger;
private readonly IHttpContextAccessor httpContextAccessor;
private readonly IContextExceptionLogger logger;
private readonly HttpContextWrapper httpContextWrapper;
public StackdriverExceptionHandler(IExceptionLogger logger, IHttpContextAccessor httpContextAccessor)
public sealed class HttpContextWrapper : IContextWrapper
{
private readonly IHttpContextAccessor httpContextAccessor;
internal HttpContextWrapper(IHttpContextAccessor httpContextAccessor)
{
this.httpContextAccessor = httpContextAccessor;
}
public string GetHttpMethod()
{
return httpContextAccessor.HttpContext?.Request?.Method?.ToString();
}
public string GetUri()
{
return httpContextAccessor.HttpContext?.Request?.GetDisplayUrl();
}
public string GetUserAgent()
{
return httpContextAccessor.HttpContext?.Request?.Headers["User-Agent"].ToString();
}
}
public StackdriverExceptionHandler(IContextExceptionLogger logger, IHttpContextAccessor httpContextAccessor)
{
this.logger = logger;
this.httpContextAccessor = httpContextAccessor;
httpContextWrapper = new HttpContextWrapper(httpContextAccessor);
}
public void Append(IObjectWriter writer, SemanticLogLevel logLevel, Exception exception)
{
if (exception != null && exception is not DomainException)
{
var httpContext = httpContextAccessor.HttpContext;
logger.Log(exception, httpContext ?? fallbackContext);
logger.Log(exception, httpContextWrapper);
}
}
}

29
backend/extensions/Squidex.Extensions/APM/Stackdriver/StackdriverPlugin.cs

@ -5,6 +5,8 @@
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System.Reflection;
using Google.Cloud.Diagnostics.Common;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using OpenTelemetry.Trace;
@ -17,21 +19,28 @@ namespace Squidex.Extensions.APM.Stackdriver
{
public void ConfigureServices(IServiceCollection services, IConfiguration config)
{
services.AddOpenTelemetryTracing(builder =>
var projectId = config.GetValue<string>("logging:stackdriver:projectId");
var projectName = config.GetValue<string>("logging:stackdriver:projectName") ?? "Squidex";
var isEnabled = config.GetValue<bool>("logging:stackdriver:enabled");
if (isEnabled && !string.IsNullOrWhiteSpace(projectId))
{
if (config.GetValue<bool>("logging:stackdriver:enabled"))
services.AddOpenTelemetryTracing(builder =>
{
var projectId = config.GetValue<string>("logging:stackdriver:projectId");
builder.UseStackdriverExporter(projectId);
});
services.AddSingleton<ILogAppender,
StackdriverSeverityLogAppender>();
services.AddSingleton<ILogAppender,
StackdriverExceptionHandler>();
services.AddSingleton<ILogAppender,
StackdriverSeverityLogAppender>();
var version = Assembly.GetEntryAssembly().GetName().Version?.ToString();
services.AddSingleton<ILogAppender,
StackdriverExceptionHandler>();
}
});
services.AddSingleton(c => ContextExceptionLogger.Create(projectId, projectName, version, null));
}
}
}
}

2
backend/extensions/Squidex.Extensions/Squidex.Extensions.csproj

@ -14,7 +14,7 @@
<PackageReference Include="Confluent.SchemaRegistry.Serdes" Version="1.3.0" />
<PackageReference Include="CoreTweet" Version="1.0.0.483" />
<PackageReference Include="Elasticsearch.Net" Version="7.14.1" />
<PackageReference Include="Google.Cloud.Diagnostics.AspNetCore" Version="4.0.0" />
<PackageReference Include="Google.Cloud.Diagnostics.Common" Version="4.0.0" />
<PackageReference Include="Google.Cloud.Logging.V2" Version="3.3.0" />
<PackageReference Include="Microsoft.Azure.CognitiveServices.Vision.ComputerVision" Version="7.0.0" />
<PackageReference Include="Microsoft.Azure.SignalR.Management" Version="1.9.2" />

4
backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj

@ -27,8 +27,8 @@
<PackageReference Include="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets" Version="1.8.0" />
<PackageReference Include="Squidex.Caching" Version="1.8.0" />
<PackageReference Include="Squidex.Hosting.Abstractions" Version="1.9.0" />
<PackageReference Include="Squidex.Log" Version="1.5.0" />
<PackageReference Include="Squidex.Hosting.Abstractions" Version="2.0.0" />
<PackageReference Include="Squidex.Log" Version="1.6.0" />
<PackageReference Include="Squidex.Text" Version="1.7.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Collections.Immutable" Version="5.0.0" />

2
backend/src/Squidex/Squidex.csproj

@ -71,7 +71,7 @@
<PackageReference Include="Squidex.Assets.S3" Version="1.8.0" />
<PackageReference Include="Squidex.Caching.Orleans" Version="1.8.0" />
<PackageReference Include="Squidex.ClientLibrary" Version="7.4.0" />
<PackageReference Include="Squidex.Hosting" Version="1.9.0" />
<PackageReference Include="Squidex.Hosting" Version="2.0.0" />
<PackageReference Include="Squidex.OpenIddict.MongoDb" Version="4.0.1-dev" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Linq" Version="4.3.0" />

Loading…
Cancel
Save