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) 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 => builder.AddAzureMonitorTraceExporter(options =>
{ {
config.GetSection("logging:applicationInsights").Bind(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) 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 // 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); AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true);
@ -28,8 +28,8 @@ namespace Squidex.Extensions.APM.Datadog
{ {
config.GetSection("logging:otlp").Bind(options); config.GetSection("logging:otlp").Bind(options);
}); });
} });
}); }
} }
} }
} }

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

@ -6,33 +6,56 @@
// ========================================================================== // ==========================================================================
using System; using System;
using Google.Cloud.Diagnostics.AspNetCore; using Google.Cloud.Diagnostics.Common;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Extensions;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Log; using Squidex.Log;
namespace Squidex.Extensions.APM.Stackdriver namespace Squidex.Extensions.APM.Stackdriver
{ {
internal class StackdriverExceptionHandler : ILogAppender internal sealed class StackdriverExceptionHandler : ILogAppender
{ {
private readonly DefaultHttpContext fallbackContext = new DefaultHttpContext(); private readonly IContextExceptionLogger logger;
private readonly IExceptionLogger logger; private readonly HttpContextWrapper httpContextWrapper;
private readonly IHttpContextAccessor httpContextAccessor;
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.logger = logger;
this.httpContextAccessor = httpContextAccessor; httpContextWrapper = new HttpContextWrapper(httpContextAccessor);
} }
public void Append(IObjectWriter writer, SemanticLogLevel logLevel, Exception exception) public void Append(IObjectWriter writer, SemanticLogLevel logLevel, Exception exception)
{ {
if (exception != null && exception is not DomainException) if (exception != null && exception is not DomainException)
{ {
var httpContext = httpContextAccessor.HttpContext; logger.Log(exception, httpContextWrapper);
logger.Log(exception, httpContext ?? fallbackContext);
} }
} }
} }

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

@ -5,6 +5,8 @@
// All rights reserved. Licensed under the MIT license. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using System.Reflection;
using Google.Cloud.Diagnostics.Common;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using OpenTelemetry.Trace; using OpenTelemetry.Trace;
@ -17,21 +19,28 @@ namespace Squidex.Extensions.APM.Stackdriver
{ {
public void ConfigureServices(IServiceCollection services, IConfiguration config) 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); builder.UseStackdriverExporter(projectId);
});
services.AddSingleton<ILogAppender,
StackdriverSeverityLogAppender>();
services.AddSingleton<ILogAppender,
StackdriverExceptionHandler>();
services.AddSingleton<ILogAppender, var version = Assembly.GetEntryAssembly().GetName().Version?.ToString();
StackdriverSeverityLogAppender>();
services.AddSingleton<ILogAppender, services.AddSingleton(c => ContextExceptionLogger.Create(projectId, projectName, version, null));
StackdriverExceptionHandler>(); }
}
});
} }
} }
} }

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

@ -14,7 +14,7 @@
<PackageReference Include="Confluent.SchemaRegistry.Serdes" Version="1.3.0" /> <PackageReference Include="Confluent.SchemaRegistry.Serdes" Version="1.3.0" />
<PackageReference Include="CoreTweet" Version="1.0.0.483" /> <PackageReference Include="CoreTweet" Version="1.0.0.483" />
<PackageReference Include="Elasticsearch.Net" Version="7.14.1" /> <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="Google.Cloud.Logging.V2" Version="3.3.0" />
<PackageReference Include="Microsoft.Azure.CognitiveServices.Vision.ComputerVision" Version="7.0.0" /> <PackageReference Include="Microsoft.Azure.CognitiveServices.Vision.ComputerVision" Version="7.0.0" />
<PackageReference Include="Microsoft.Azure.SignalR.Management" Version="1.9.2" /> <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="RefactoringEssentials" Version="5.6.0" PrivateAssets="all" />
<PackageReference Include="Squidex.Assets" Version="1.8.0" /> <PackageReference Include="Squidex.Assets" Version="1.8.0" />
<PackageReference Include="Squidex.Caching" Version="1.8.0" /> <PackageReference Include="Squidex.Caching" Version="1.8.0" />
<PackageReference Include="Squidex.Hosting.Abstractions" Version="1.9.0" /> <PackageReference Include="Squidex.Hosting.Abstractions" Version="2.0.0" />
<PackageReference Include="Squidex.Log" Version="1.5.0" /> <PackageReference Include="Squidex.Log" Version="1.6.0" />
<PackageReference Include="Squidex.Text" Version="1.7.0" /> <PackageReference Include="Squidex.Text" Version="1.7.0" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Collections.Immutable" Version="5.0.0" /> <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.Assets.S3" Version="1.8.0" />
<PackageReference Include="Squidex.Caching.Orleans" Version="1.8.0" /> <PackageReference Include="Squidex.Caching.Orleans" Version="1.8.0" />
<PackageReference Include="Squidex.ClientLibrary" Version="7.4.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="Squidex.OpenIddict.MongoDb" Version="4.0.1-dev" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" /> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118" PrivateAssets="all" />
<PackageReference Include="System.Linq" Version="4.3.0" /> <PackageReference Include="System.Linq" Version="4.3.0" />

Loading…
Cancel
Save