Browse Source

Logging fixes.

pull/749/head
Sebastian 4 years ago
parent
commit
dd27344d97
  1. 6
      backend/extensions/Squidex.Extensions/APM/ApplicationInsights/ApplicationInsightsPlugin.cs
  2. 6
      backend/extensions/Squidex.Extensions/APM/Otlp/OtlpPlugin.cs
  3. 41
      backend/extensions/Squidex.Extensions/APM/Stackdriver/StackdriverExceptionHandler.cs
  4. 19
      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

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

@ -15,17 +15,17 @@ namespace Squidex.Extensions.APM.ApplicationInsights
public sealed class ApplicationInsightsPlugin : IPlugin public sealed class ApplicationInsightsPlugin : IPlugin
{ {
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);
}); });
}
}); });
} }
} }
}
} }

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

@ -16,10 +16,10 @@ namespace Squidex.Extensions.APM.Datadog
public sealed class OtlpPlugin : IPlugin public sealed class OtlpPlugin : IPlugin
{ {
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);
}); });
}
}); });
} }
} }
}
} }

41
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 IContextExceptionLogger logger;
private readonly HttpContextWrapper httpContextWrapper;
public sealed class HttpContextWrapper : IContextWrapper
{ {
private readonly DefaultHttpContext fallbackContext = new DefaultHttpContext();
private readonly IExceptionLogger logger;
private readonly IHttpContextAccessor httpContextAccessor; private readonly IHttpContextAccessor httpContextAccessor;
public StackdriverExceptionHandler(IExceptionLogger logger, 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);
} }
} }
} }

19
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;
@ -16,22 +18,29 @@ namespace Squidex.Extensions.APM.Stackdriver
public sealed class StackdriverPlugin : IPlugin public sealed class StackdriverPlugin : IPlugin
{ {
public void ConfigureServices(IServiceCollection services, IConfiguration config) public void ConfigureServices(IServiceCollection services, IConfiguration config)
{
services.AddOpenTelemetryTracing(builder =>
{
if (config.GetValue<bool>("logging:stackdriver:enabled"))
{ {
var projectId = config.GetValue<string>("logging:stackdriver:projectId"); 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))
{
services.AddOpenTelemetryTracing(builder =>
{
builder.UseStackdriverExporter(projectId); builder.UseStackdriverExporter(projectId);
});
services.AddSingleton<ILogAppender, services.AddSingleton<ILogAppender,
StackdriverSeverityLogAppender>(); StackdriverSeverityLogAppender>();
services.AddSingleton<ILogAppender, services.AddSingleton<ILogAppender,
StackdriverExceptionHandler>(); StackdriverExceptionHandler>();
var version = Assembly.GetEntryAssembly().GetName().Version?.ToString();
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="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