Skip to content

Commit 68fb26f

Browse files
committed
Added a typed scope when using the task api for log scopes
1 parent ba2d4f1 commit 68fb26f

File tree

5 files changed

+59
-5
lines changed

5 files changed

+59
-5
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.vscode
22
bin
33
obj
4+
dotNet/.idea/.idea.TaskLogging/.idea

dotNet/CoreHelpers.Extensions.Logging.Tasks/TaskLoggerExtension.cs

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
using System;
2+
using System.Runtime.CompilerServices;
3+
using CoreHelpers.TaskLogging;
24
using Microsoft.Extensions.Logging;
35
using Microsoft.Extensions.DependencyInjection;
46

@@ -12,10 +14,19 @@ public static ILoggingBuilder AddTaskLogger(this ILoggingBuilder builder)
1214
return builder;
1315
}
1416

15-
public static IDisposable? BeginTaskScope(this ILogger logger, string taskId)
16-
=> logger.BeginScope<TaskLoggerState>(new TaskLoggerState() { TaskId = taskId, IsTaskAnnounced = true });
17+
public static ITaskLoggerTypedScope? BeginTaskScope(this ILogger logger, string taskId)
18+
=> BeginTypedTaskScope(logger, new TaskLoggerState() { TaskId = taskId, IsTaskAnnounced = true });
1719

18-
public static IDisposable? BeginNewTaskScope(this ILogger logger, string taskType, string taskSource, string taskWorker)
19-
=> logger.BeginScope<TaskLoggerState>(new TaskLoggerState() { TaskId = string.Empty, TaskType = taskType, TaskSource = taskSource, TaskWorker = taskWorker, IsTaskAnnounced = false });
20+
public static ITaskLoggerTypedScope? BeginNewTaskScope(this ILogger logger, string taskType, string taskSource, string taskWorker)
21+
=> BeginTypedTaskScope(logger, new TaskLoggerState() { TaskId = string.Empty, TaskType = taskType, TaskSource = taskSource, TaskWorker = taskWorker, IsTaskAnnounced = false });
22+
23+
private static ITaskLoggerTypedScope? BeginTypedTaskScope(ILogger logger, TaskLoggerState taskLoggerState)
24+
{
25+
var innerDisposable = logger.BeginScope<TaskLoggerState>(taskLoggerState);
26+
if (innerDisposable == null)
27+
return null;
28+
29+
return new TaskLoggerTypedScope(taskLoggerState, innerDisposable);
30+
}
2031
}
2132
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using System;
2+
using CoreHelpers.TaskLogging;
3+
4+
namespace CoreHelpers.Extensions.Logging.Tasks
5+
{
6+
internal class TaskLoggerTypedScope : ITaskLoggerTypedScope
7+
{
8+
private readonly IDisposable _innerDisposable;
9+
10+
public TaskLoggerTypedScope(TaskLoggerState taskLoggerState, IDisposable innerDisposable)
11+
{
12+
TaskId = taskLoggerState.TaskId;
13+
TaskType = taskLoggerState.TaskType;
14+
TaskSource = taskLoggerState.TaskSource;
15+
TaskWorker = taskLoggerState.TaskWorker;
16+
17+
_innerDisposable = innerDisposable;
18+
}
19+
public void Dispose()
20+
{
21+
_innerDisposable.Dispose();
22+
}
23+
24+
public string TaskId { get; }
25+
public string TaskType { get; }
26+
public string TaskSource { get; }
27+
public string TaskWorker { get; }
28+
}
29+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
3+
namespace CoreHelpers.TaskLogging
4+
{
5+
public interface ITaskLoggerTypedScope : IDisposable
6+
{
7+
string TaskId { get; }
8+
string TaskType { get; }
9+
string TaskSource { get; }
10+
string TaskWorker { get; }
11+
}
12+
}

dotNet/CoreHelpers.TaskLogging.Sample/Worker.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ public async Task Process()
2626
}
2727

2828
// execute the failedprocessor
29-
using (_logger.BeginNewTaskScope("failedjob", "q", "w"))
29+
using (var scope = _logger.BeginNewTaskScope("failedjob", "q", "w"))
3030
{
31+
Console.WriteLine(scope.TaskId);
3132
await _processors.Where(p => p is ProcessorFailed).First().Execute();
3233
}
3334

0 commit comments

Comments
 (0)