elsa-workflows / elsa-workflows/elsa-core

LogActivity based on ILogger

Open
#4,606 0 comments 0 reactions 0 assignees View on GitHub
triaged
Dominant language
C#
Stars
7.9k
Forks
1.5k
Avg merge
15h 22m
Merged PRs (30d)
114

Description

hello,
I created a new activity like WriteLine but logs into the configured logger based on ILogger
here is the source code

```cs
[Activity(Category = "Logging", Description = "Logs using ILogger")]
public class LogActivity : Activity
{
private readonly ILogger _logger;

public LogActivity(ILogger logger)
{
_logger = logger;
}

[ActivityInput(Hint = "The message to log.")]
public string Message { get; set; }

[ActivityInput(Hint = "The level of the log")]
public LogLevel LogLevel { get; set; }

protected override async ValueTask OnExecuteAsync(ActivityExecutionContext context)
{
_logger.Log(LogLevel, Message);
return Done();
}
}
```

I added extension methods to use the activity like `builder.LogInformation("this is an information")`

```cs
public static class WorkflowBuilderExtensions
{
public static IActivityBuilder LogInformation(
this IBuilder builder, string message,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.Log(activity => activity.WithMessage(message!, LogLevel.Information), lineNumber, sourceFile);

public static IActivityBuilder LogError(
this IBuilder builder, string message,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.Log(activity => activity.WithMessage(message!, LogLevel.Error), lineNumber, sourceFile);

public static IActivityBuilder LogCritical(
this IBuilder builder, string message,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.Log(activity => activity.WithMessage(message!, LogLevel.Critical), lineNumber, sourceFile);

public static IActivityBuilder LogDebug(
this IBuilder builder, string message,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.Log(activity => activity.WithMessage(message!, LogLevel.Debug), lineNumber, sourceFile);

public static IActivityBuilder LogWarning(
this IBuilder builder, string message,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.Log(activity => activity.WithMessage(message!, LogLevel.Warning), lineNumber, sourceFile);

public static IActivityBuilder LogTrace(
this IBuilder builder, string message,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.Log(activity => activity.WithMessage(message!, LogLevel.Trace), lineNumber, sourceFile);

private static IActivityBuilder Log(
this IBuilder builder,
Action> setup,
[CallerLineNumber] int lineNumber = default,
[CallerFilePath] string? sourceFile = default) =>
builder.Then(setup, null, lineNumber, sourceFile);

private static ISetupActivity WithMessage(
this ISetupActivity writeMessage,
string? message,
LogLevel logLevel) =>
writeMessage
.Set(x => x.Message, message)
.Set(x => x.LogLevel, logLevel);
}

```

If you think it's worth putting this in a pull request, please let me know.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.