elsa-workflows / elsa-workflows/elsa-core
LogActivity based on ILogger
- 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
Assessment
This issue has not been assessed yet.