diff --git a/.github/workflows/code-coverage.yml b/.github/workflows/code-coverage.yml
index 8c357e58..a7ef1c5f 100644
--- a/.github/workflows/code-coverage.yml
+++ b/.github/workflows/code-coverage.yml
@@ -23,7 +23,10 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
-
+ - uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: '8.0.x'
+ dotnet-quality: 'preview'
- name: Coverlet coverage test
uses: b3b00/coverlet-action@1.2.4
with:
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index 6f3680a8..bd693227 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -39,6 +39,10 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v2
+ - uses: actions/setup-dotnet@v3
+ with:
+ dotnet-version: '8.0.x'
+ dotnet-quality: 'preview'
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
diff --git a/build/ci-build.yml b/build/ci-build.yml
index 9c24aec9..1f972131 100644
--- a/build/ci-build.yml
+++ b/build/ci-build.yml
@@ -48,10 +48,17 @@ stages:
inputs:
packageType: 'sdk'
version: '$(DotNet.Sdk.PreviousVersion)'
+ - task: UseDotNet@2
+ displayName: 'Import .NET Core SDK ($(DotNet.Sdk.Version))'
+ inputs:
+ packageType: 'sdk'
+ version: '$(DotNet.Sdk.Version)'
+ includePreviewVersions: true
- template: 'build/build-solution.yml@templates'
parameters:
dotnetSdkVersion: '$(DotNet.Sdk.Version)'
versionSuffix: '$(packageVersion)'
+ includePreviewVersions: true
- task: CopyFiles@2
displayName: 'Copy build artifacts'
inputs:
@@ -86,6 +93,7 @@ stages:
- template: test/run-unit-tests.yml@templates
parameters:
dotnetSdkVersion: '$(DotNet.Sdk.Version)'
+ includePreviewVersions: true
projectName: '$(Project).Tests.Unit'
- stage: IntegrationTests
@@ -111,6 +119,7 @@ stages:
- template: test/run-integration-tests.yml@templates
parameters:
dotnetSdkVersion: '$(DotNet.Sdk.Version)'
+ includePreviewVersions: true
projectName: '$(Project).Tests.Integration'
category: 'Integration'
diff --git a/build/nuget-release.yml b/build/nuget-release.yml
index 7e17d831..d0383111 100644
--- a/build/nuget-release.yml
+++ b/build/nuget-release.yml
@@ -35,6 +35,7 @@ stages:
parameters:
dotnetSdkVersion: '$(DotNet.Sdk.Version)'
version: $(Build.BuildNumber)
+ includePreviewVersions: true
- task: UseDotNet@2
displayName: 'Import .NET Core SDK ($(DotNet.Sdk.PreviousVersion))'
inputs:
@@ -74,6 +75,7 @@ stages:
- template: test/run-unit-tests.yml@templates
parameters:
dotnetSdkVersion: '$(DotNet.Sdk.Version)'
+ includePreviewVersions: true
projectName: '$(Project).Tests.Unit'
- stage: IntegrationTests
@@ -99,6 +101,7 @@ stages:
- template: test/run-integration-tests.yml@templates
parameters:
dotnetSdkVersion: '$(DotNet.Sdk.Version)'
+ includePreviewVersions: true
projectName: '$(Project).Tests.Integration'
category: 'Integration'
diff --git a/build/templates/run-docker-integration-tests.yml b/build/templates/run-docker-integration-tests.yml
index a9f451c8..5c718e27 100644
--- a/build/templates/run-docker-integration-tests.yml
+++ b/build/templates/run-docker-integration-tests.yml
@@ -20,6 +20,7 @@ steps:
inputs:
packageType: 'sdk'
version: '$(DotNet.Sdk.Version)'
+ includePreviewVersions: true
- task: Docker@1
displayName: 'Build Docker image from ${{ parameters.dockerProjectName }}'
inputs:
@@ -36,9 +37,11 @@ steps:
ports: '${{ parameters.httpPort }}:80'
envVars: |
APPINSIGHTS_INSTRUMENTATIONKEY=$(ApplicationInsights.InstrumentationKey)
+ AzureWebJobsStorage=$(Arcus.AzureFunctions.AzureWebJobsStorage)
- template: test/run-integration-tests.yml@templates
parameters:
dotnetSdkVersion: '$(DotNet.Sdk.Version)'
+ includePreviewVersions: true
projectName: '$(Project).Tests.Integration'
category: 'Docker'
- task: Bash@3
@@ -48,4 +51,4 @@ steps:
docker logs ${{ parameters.dockerProjectName }}
failOnStderr: true
displayName: Show ${{ parameters.dockerProjectName }} logs
- condition: always()
\ No newline at end of file
+ condition: always()
diff --git a/build/variables/build.yml b/build/variables/build.yml
index 166b711c..98657063 100644
--- a/build/variables/build.yml
+++ b/build/variables/build.yml
@@ -1,5 +1,5 @@
variables:
- DotNet.Sdk.Version: '6.0.100'
- DotNet.Sdk.PreviousVersion: '3.1.201'
+ DotNet.Sdk.Version: '8.0.x'
+ DotNet.Sdk.PreviousVersion: '6.0.100'
Project: 'Arcus.Observability'
- Vm.Image: 'ubuntu-latest'
\ No newline at end of file
+ Vm.Image: 'ubuntu-latest'
diff --git a/src/Arcus.Observability.Correlation/Arcus.Observability.Correlation.csproj b/src/Arcus.Observability.Correlation/Arcus.Observability.Correlation.csproj
index f7957c08..3253a192 100644
--- a/src/Arcus.Observability.Correlation/Arcus.Observability.Correlation.csproj
+++ b/src/Arcus.Observability.Correlation/Arcus.Observability.Correlation.csproj
@@ -1,7 +1,7 @@
- net6.0;netstandard2.1;netcoreapp3.1
+ net8.0;net6.0;netstandard2.1
Arcus
Arcus
Provides capability to use correlation in applications
@@ -24,13 +24,13 @@
-
+
-
+
diff --git a/src/Arcus.Observability.Telemetry.AspNetCore/Arcus.Observability.Telemetry.AspNetCore.csproj b/src/Arcus.Observability.Telemetry.AspNetCore/Arcus.Observability.Telemetry.AspNetCore.csproj
index 1a60ab76..8e5c6aae 100644
--- a/src/Arcus.Observability.Telemetry.AspNetCore/Arcus.Observability.Telemetry.AspNetCore.csproj
+++ b/src/Arcus.Observability.Telemetry.AspNetCore/Arcus.Observability.Telemetry.AspNetCore.csproj
@@ -1,7 +1,7 @@
- net6.0;netstandard2.1;netcoreapp3.1
+ net8.0;net6.0;netstandard2.1
Arcus
Arcus
Provides capability to improve ASP.NET Core telemetry with Serilog in applications
@@ -32,11 +32,11 @@
-
+
-
+
diff --git a/src/Arcus.Observability.Telemetry.AzureFunctions/Arcus.Observability.Telemetry.AzureFunctions.csproj b/src/Arcus.Observability.Telemetry.AzureFunctions/Arcus.Observability.Telemetry.AzureFunctions.csproj
index 719fcf40..b29606c1 100644
--- a/src/Arcus.Observability.Telemetry.AzureFunctions/Arcus.Observability.Telemetry.AzureFunctions.csproj
+++ b/src/Arcus.Observability.Telemetry.AzureFunctions/Arcus.Observability.Telemetry.AzureFunctions.csproj
@@ -1,7 +1,7 @@
- net6.0;netstandard2.1;netcoreapp3.1
+ net8.0;net6.0;netstandard2.1
Arcus
Arcus
Provides capability to improve telemetry with Serilog in Azure Functions applications
@@ -24,13 +24,13 @@
-
+
-
+
diff --git a/src/Arcus.Observability.Telemetry.AzureFunctions/Extensions/ILoggerHttpRequestDataExtensions.cs b/src/Arcus.Observability.Telemetry.AzureFunctions/Extensions/ILoggerHttpRequestDataExtensions.cs
index ee6a88f8..b43dd3f5 100644
--- a/src/Arcus.Observability.Telemetry.AzureFunctions/Extensions/ILoggerHttpRequestDataExtensions.cs
+++ b/src/Arcus.Observability.Telemetry.AzureFunctions/Extensions/ILoggerHttpRequestDataExtensions.cs
@@ -4,14 +4,14 @@
using Arcus.Observability.Telemetry.Core;
using Arcus.Observability.Telemetry.Core.Logging;
using GuardNet;
-#if NET6_0
+#if !(NETSTANDARD2_1)
using Microsoft.Azure.Functions.Worker.Http;
#endif
// ReSharper disable once CheckNamespace
namespace Microsoft.Extensions.Logging
{
-#if NET6_0
+#if !(NETSTANDARD2_1)
///
/// Telemetry extensions on the instance to write Application Insights compatible log messages.
///
diff --git a/src/Arcus.Observability.Telemetry.Core/Arcus.Observability.Telemetry.Core.csproj b/src/Arcus.Observability.Telemetry.Core/Arcus.Observability.Telemetry.Core.csproj
index 32405283..d8ea9bfe 100644
--- a/src/Arcus.Observability.Telemetry.Core/Arcus.Observability.Telemetry.Core.csproj
+++ b/src/Arcus.Observability.Telemetry.Core/Arcus.Observability.Telemetry.Core.csproj
@@ -1,7 +1,7 @@
- net6.0;netstandard2.1
+ net8.0;net6.0;netstandard2.1
Arcus
Arcus
Provides capability to improve telemetry with Serilog in applications
@@ -24,12 +24,12 @@
-
+
-
+
diff --git a/src/Arcus.Observability.Telemetry.IoT/Arcus.Observability.Telemetry.IoT.csproj b/src/Arcus.Observability.Telemetry.IoT/Arcus.Observability.Telemetry.IoT.csproj
index bbdd0af4..3d29293f 100644
--- a/src/Arcus.Observability.Telemetry.IoT/Arcus.Observability.Telemetry.IoT.csproj
+++ b/src/Arcus.Observability.Telemetry.IoT/Arcus.Observability.Telemetry.IoT.csproj
@@ -1,7 +1,7 @@
- net6.0;netstandard2.1
+ net8.0;net6.0;netstandard2.1
Arcus
Arcus
Provides capability to improve IoT telemetry with Serilog in applications
@@ -24,12 +24,12 @@
-
+
-
+
diff --git a/src/Arcus.Observability.Telemetry.Serilog.Enrichers/Arcus.Observability.Telemetry.Serilog.Enrichers.csproj b/src/Arcus.Observability.Telemetry.Serilog.Enrichers/Arcus.Observability.Telemetry.Serilog.Enrichers.csproj
index 9df57473..907d1cc2 100644
--- a/src/Arcus.Observability.Telemetry.Serilog.Enrichers/Arcus.Observability.Telemetry.Serilog.Enrichers.csproj
+++ b/src/Arcus.Observability.Telemetry.Serilog.Enrichers/Arcus.Observability.Telemetry.Serilog.Enrichers.csproj
@@ -1,7 +1,7 @@
- net6.0;netstandard2.1;netcoreapp3.1
+ net8.0;net6.0;netstandard2.1
Arcus
Arcus
Provides capability to improve telemetry with Serilog in applications
@@ -24,11 +24,11 @@
-
+
-
+
diff --git a/src/Arcus.Observability.Telemetry.Serilog.Filters/Arcus.Observability.Telemetry.Serilog.Filters.csproj b/src/Arcus.Observability.Telemetry.Serilog.Filters/Arcus.Observability.Telemetry.Serilog.Filters.csproj
index 06bde3cc..a007f552 100644
--- a/src/Arcus.Observability.Telemetry.Serilog.Filters/Arcus.Observability.Telemetry.Serilog.Filters.csproj
+++ b/src/Arcus.Observability.Telemetry.Serilog.Filters/Arcus.Observability.Telemetry.Serilog.Filters.csproj
@@ -1,7 +1,7 @@
- net6.0;netstandard2.1;netcoreapp3.1
+ net8.0;net6.0;netstandard2.1
Arcus
Arcus
Provides capability to reduce telemetry with Serilog filters
@@ -24,11 +24,11 @@
-
+
-
+
diff --git a/src/Arcus.Observability.Telemetry.Serilog.Sinks.ApplicationInsights/Arcus.Observability.Telemetry.Serilog.Sinks.ApplicationInsights.csproj b/src/Arcus.Observability.Telemetry.Serilog.Sinks.ApplicationInsights/Arcus.Observability.Telemetry.Serilog.Sinks.ApplicationInsights.csproj
index 12468a7c..cd6b143f 100644
--- a/src/Arcus.Observability.Telemetry.Serilog.Sinks.ApplicationInsights/Arcus.Observability.Telemetry.Serilog.Sinks.ApplicationInsights.csproj
+++ b/src/Arcus.Observability.Telemetry.Serilog.Sinks.ApplicationInsights/Arcus.Observability.Telemetry.Serilog.Sinks.ApplicationInsights.csproj
@@ -1,7 +1,7 @@
- net6.0;netstandard2.1;netcoreapp3.1
+ net8.0;net6.0;netstandard2.1
Arcus
Arcus
Provides capability to improve telemetry with Serilog that is sent to Azure Application Insights
diff --git a/src/Arcus.Observability.Tests.Integration/Arcus.Observability.Tests.Integration.csproj b/src/Arcus.Observability.Tests.Integration/Arcus.Observability.Tests.Integration.csproj
index da8eae2f..94e8bc08 100644
--- a/src/Arcus.Observability.Tests.Integration/Arcus.Observability.Tests.Integration.csproj
+++ b/src/Arcus.Observability.Tests.Integration/Arcus.Observability.Tests.Integration.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
false
@@ -13,6 +13,7 @@
+
diff --git a/src/Arcus.Observability.Tests.Integration/Serilog/Sinks/ApplicationInsights/AzureFunctionsDockerTests.cs b/src/Arcus.Observability.Tests.Integration/Serilog/Sinks/ApplicationInsights/AzureFunctionsDockerTests.cs
index a174edc0..4911dcb8 100644
--- a/src/Arcus.Observability.Tests.Integration/Serilog/Sinks/ApplicationInsights/AzureFunctionsDockerTests.cs
+++ b/src/Arcus.Observability.Tests.Integration/Serilog/Sinks/ApplicationInsights/AzureFunctionsDockerTests.cs
@@ -1,9 +1,6 @@
-using System.Net;
-using System.Net.Http;
+using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.ApplicationInsights.Query.Models;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.Logging;
using Xunit;
using Xunit.Abstractions;
@@ -26,27 +23,16 @@ public AzureFunctionsDockerTests(ITestOutputHelper outputWriter)
[Fact]
public async Task LogRequest_WithRequestsOperationName_SinksToApplicationInsights()
{
- // Arrange
- int httpPort = Configuration.GetValue("AzureFunctions:HttpPort");
- string? requestUri = $"http://localhost:{httpPort}/api/order";
- TestOutput.WriteLine("GET -> {0}", requestUri);
-
- using (HttpResponseMessage response = await HttpClient.GetAsync(requestUri))
+ await RetryAssertUntilTelemetryShouldBeAvailableAsync(async client =>
{
- TestOutput.WriteLine("{0} <- {1}", response.StatusCode, requestUri);
- Assert.Equal(HttpStatusCode.OK, response.StatusCode);
-
- await RetryAssertUntilTelemetryShouldBeAvailableAsync(async client =>
+ EventsRequestResult[] results = await client.GetRequestsAsync();
+ AssertX.Any(results, result =>
{
- EventsRequestResult[] results = await client.GetRequestsAsync();
- AssertX.Any(results, result =>
- {
- Assert.Contains("order", result.Request.Url);
- Assert.Equal("200", result.Request.ResultCode);
- Assert.Equal(HttpMethod.Get.Method + " /api/order", result.Operation.Name);
- });
+ Assert.Equal("200", result.Request.ResultCode);
+ Assert.Equal("Timer", result.Request.Source);
+ Assert.Equal("Triggered", result.Operation.Name);
});
- }
+ });
}
}
}
diff --git a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Arcus.Observability.Tests.Runtimes.AzureFunction.csproj b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Arcus.Observability.Tests.Runtimes.AzureFunction.csproj
index e45e8726..dcbc1371 100644
--- a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Arcus.Observability.Tests.Runtimes.AzureFunction.csproj
+++ b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Arcus.Observability.Tests.Runtimes.AzureFunction.csproj
@@ -1,19 +1,26 @@
- net6.0
+ net8.0
v4
+ Exe
+ enable
+ enable
/home/site/wwwroot
Linux
+
+
+
+
+
-
-
-
-
+
+
+
+
-
@@ -26,4 +33,7 @@
Never
+
+
+
diff --git a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Dockerfile b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Dockerfile
index c6c02d28..7666aa86 100644
--- a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Dockerfile
+++ b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Dockerfile
@@ -1,10 +1,10 @@
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
-FROM mcr.microsoft.com/azure-functions/dotnet:4.0 AS base
+FROM mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0 AS base
WORKDIR /home/site/wwwroot
EXPOSE 80
-FROM mcr.microsoft.com/dotnet/sdk:6.0.100-bullseye-slim AS build
+FROM mcr.microsoft.com/dotnet/sdk:8.0.100-preview.7-alpine3.18 AS build
WORKDIR /src
COPY ["Arcus.Observability.Tests.Runtimes.AzureFunction/Arcus.Observability.Tests.Runtimes.AzureFunction.csproj", "Arcus.Observability.Tests.Runtimes.AzureFunction/"]
RUN dotnet restore "Arcus.Observability.Tests.Runtimes.AzureFunction/Arcus.Observability.Tests.Runtimes.AzureFunction.csproj"
@@ -19,4 +19,4 @@ FROM base AS final
WORKDIR /home/site/wwwroot
COPY --from=publish /app/publish .
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
- AzureFunctionsJobHost__Logging__Console__IsEnabled=true
\ No newline at end of file
+ AzureFunctionsJobHost__Logging__Console__IsEnabled=true
diff --git a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/HttpOrderTrigger.cs b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/HttpOrderTrigger.cs
deleted file mode 100644
index dfa0a2a1..00000000
--- a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/HttpOrderTrigger.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System;
-using System.IO;
-using System.Threading.Tasks;
-using Arcus.Observability.Telemetry.Core;
-using Microsoft.AspNetCore.Mvc;
-using Microsoft.Azure.WebJobs;
-using Microsoft.Azure.WebJobs.Extensions.Http;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.Logging;
-using Newtonsoft.Json;
-
-namespace Arcus.Observability.Tests.Runtimes.AzureFunctions
-{
- public class HttpOrderTrigger
- {
- [FunctionName("order")]
- public static IActionResult Run(
- [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
- ILogger log)
- {
- log.LogInformation("C# HTTP trigger function processed a request.");
-
- using (var measurement = DurationMeasurement.Start())
- {
- try
- {
- return new OkResult();
- }
- finally
- {
- log.LogRequest(req, responseStatusCode: 200, measurement);
- }
- }
- }
- }
-}
diff --git a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Program.cs b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Program.cs
new file mode 100644
index 00000000..e3e043a1
--- /dev/null
+++ b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Program.cs
@@ -0,0 +1,127 @@
+using System.Diagnostics;
+using Arcus.Observability.Correlation;
+using Arcus.Observability.Telemetry.Core;
+using Microsoft.Azure.Functions.Worker;
+using Microsoft.Azure.Functions.Worker.Middleware;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+using Microsoft.Extensions.Logging;
+using Serilog;
+using Serilog.Configuration;
+using Serilog.Events;
+using ILogger = Microsoft.Extensions.Logging.ILogger;
+
+namespace Arcus.Observability.Tests.Runtimes.AzureFunction
+{
+ public class Program
+ {
+ public static void Main(string[] args)
+ {
+ var host =
+ Host.CreateDefaultBuilder(args)
+ .ConfigureFunctionsWorkerDefaults(builder =>
+ {
+ builder.UseMiddleware();
+
+ builder.Services.AddCorrelation(_ => new ActivityCorrelationInfoAccessor());
+ builder.Services.AddApplicationInsightsTelemetryWorkerService();
+ builder.Services.ConfigureFunctionsApplicationInsights();
+ })
+ .UseSerilog((context, provider, logConfig) =>
+ {
+ var config = provider.GetRequiredService();
+ string instrumentationKey = config.GetValue("APPINSIGHTS_INSTRUMENTATIONKEY");
+
+ logConfig.MinimumLevel.Debug()
+ .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
+ .Enrich.FromLogContext()
+ .Enrich.WithComponentName("Timer")
+ .Enrich.WithCorrelationInfo(provider)
+ .WriteTo.AzureApplicationInsightsWithInstrumentationKey(provider, instrumentationKey);
+ })
+ .Build();
+
+ host.Run();
+ }
+ }
+
+ ///
+ /// Represents an implementation that solely retrieves the correlation information from the .
+ /// Mostly used for places where the Application Insights is baked in and there is no way to hook in custom Arcus functionality.
+ ///
+ internal class ActivityCorrelationInfoAccessor : ICorrelationInfoAccessor
+ {
+ ///
+ /// Gets the current correlation information initialized in this context.
+ ///
+ public CorrelationInfo GetCorrelationInfo()
+ {
+ var activity = Activity.Current;
+ if (activity == null)
+ {
+ return null;
+ }
+
+ if (activity.IdFormat == ActivityIdFormat.W3C)
+ {
+ string operationParentId = DetermineW3CParentId(activity);
+ return new CorrelationInfo(
+ activity.SpanId.ToHexString(),
+ activity.TraceId.ToHexString(),
+ operationParentId);
+ }
+
+ return new CorrelationInfo(
+ activity.Id,
+ activity.RootId,
+ activity.ParentId);
+ }
+
+ private static string DetermineW3CParentId(Activity activity)
+ {
+ if (activity.ParentSpanId != default)
+ {
+ return activity.ParentSpanId.ToHexString();
+ }
+
+ if (!string.IsNullOrEmpty(activity.ParentId))
+ {
+ // W3C activity with non-W3C parent must keep parentId
+ return activity.ParentId;
+ }
+
+ return null;
+ }
+
+ ///
+ /// Sets the current correlation information for this context.
+ ///
+ /// The correlation model to set.
+ public void SetCorrelationInfo(CorrelationInfo correlationInfo)
+ {
+ throw new InvalidOperationException(
+ "Cannot set new correlation information in Azure Functions in-process model");
+ }
+ }
+
+ public class RequestTrackingMiddleware : IFunctionsWorkerMiddleware
+ {
+ public async Task Invoke(FunctionContext context, FunctionExecutionDelegate next)
+ {
+ using (var measurement = DurationMeasurement.Start())
+ {
+ try
+ {
+ await next(context);
+ }
+ finally
+ {
+ ILogger log = context.GetLogger();
+ log.LogCustomRequest("Timer", "Triggered", isSuccessful: true, measurement);
+ }
+ }
+ await next(context);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Startup.cs b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Startup.cs
deleted file mode 100644
index 8cb877ed..00000000
--- a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/Startup.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using Arcus.Observability.Tests.Runtimes.AzureFunctions;
-using Microsoft.Azure.Functions.Extensions.DependencyInjection;
-using Microsoft.Extensions.Configuration;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.Logging;
-using Serilog;
-using Serilog.Configuration;
-using Serilog.Events;
-using Serilog.Extensions.Logging;
-
-[assembly: FunctionsStartup(typeof(Startup))]
-
-namespace Arcus.Observability.Tests.Runtimes.AzureFunctions
-{
- internal class Startup : FunctionsStartup
- {
- public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
- {
- builder.ConfigurationBuilder.AddEnvironmentVariables();
- }
-
- public override void Configure(IFunctionsHostBuilder builder)
- {
- IConfiguration appConfig = builder.GetContext().Configuration;
- var instrumentationKey = appConfig.GetValue("APPINSIGHTS_INSTRUMENTATIONKEY");
-
- builder.Services.AddApplicationInsightsTelemetryWorkerService();
- builder.Services.AddLogging(logging =>
- {
- logging.RemoveMicrosoftApplicationInsightsLoggerProvider();
- logging.Services.AddSingleton(provider =>
- {
- var logConfig = new LoggerConfiguration()
- .MinimumLevel.Debug()
- .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
- .Enrich.FromLogContext()
- .WriteTo.AzureApplicationInsightsWithInstrumentationKey(provider, instrumentationKey);
-
- return new SerilogLoggerProvider(logConfig.CreateLogger(), dispose: true);
- });
- });
- }
- }
-}
diff --git a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/TimerTriggerFunction.cs b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/TimerTriggerFunction.cs
new file mode 100644
index 00000000..3ceef929
--- /dev/null
+++ b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/TimerTriggerFunction.cs
@@ -0,0 +1,38 @@
+using Microsoft.Azure.Functions.Worker;
+using Microsoft.Extensions.Logging;
+
+namespace Arcus.Observability.Tests.Runtimes.AzureFunction
+{
+ public class Function1
+ {
+ private readonly ILogger _logger;
+
+ public Function1(ILoggerFactory loggerFactory)
+ {
+ _logger = loggerFactory.CreateLogger();
+ }
+
+ [Function("Function1")]
+ public void Run([TimerTrigger("0 */5 * * * *")] MyInfo myTimer)
+ {
+ _logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
+ _logger.LogInformation($"Next timer schedule at: {myTimer.ScheduleStatus.Next}");
+ }
+ }
+
+ public class MyInfo
+ {
+ public MyScheduleStatus ScheduleStatus { get; set; }
+
+ public bool IsPastDue { get; set; }
+ }
+
+ public class MyScheduleStatus
+ {
+ public DateTime Last { get; set; }
+
+ public DateTime Next { get; set; }
+
+ public DateTime LastUpdated { get; set; }
+ }
+}
diff --git a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/host.json b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/host.json
index beb2e402..f4d3eeda 100644
--- a/src/Arcus.Observability.Tests.Runtimes.AzureFunction/host.json
+++ b/src/Arcus.Observability.Tests.Runtimes.AzureFunction/host.json
@@ -1,11 +1,14 @@
{
- "version": "2.0",
- "logging": {
- "applicationInsights": {
- "samplingSettings": {
- "isEnabled": true,
- "excludedTypes": "Request"
- }
- }
+ "version": "2.0",
+ "logging": {
+ "logLevel": {
+ "default": "Trace"
+ },
+ "applicationInsights": {
+ "samplingSettings": {
+ "isEnabled": true,
+ "excludedTypes": "Request"
+ }
}
+ }
}
\ No newline at end of file
diff --git a/src/Arcus.Observability.Tests.Unit/Arcus.Observability.Tests.Unit.csproj b/src/Arcus.Observability.Tests.Unit/Arcus.Observability.Tests.Unit.csproj
index 83b434eb..8a09c3f3 100644
--- a/src/Arcus.Observability.Tests.Unit/Arcus.Observability.Tests.Unit.csproj
+++ b/src/Arcus.Observability.Tests.Unit/Arcus.Observability.Tests.Unit.csproj
@@ -1,7 +1,7 @@
- net6.0
+ net8.0
false
false
CS0618