Logger
Logger 提供标准的结构化日志记录能力,基于 Microsoft.Extensions.Logging。在 C# 脚本或微服务开发中,可以通过它输出不同级别的日志信息。
使用方式
public ILogger<ChameleonSDK> Logger => serviceProvider.GetRequiredService<ILogger<ChameleonSDK>>();
日志级别
| 方法 | 级别 | 说明 |
|---|---|---|
LogTrace | Trace | 最详细的跟踪日志,通常仅在开发调试时启用 |
LogDebug | Debug | 调试信息 |
LogInformation | Information | 常规信息日志(最常用) |
LogWarning | Warning | 警告信息,表示潜在问题 |
LogError | Error | 错误信息,表示操作失败 |
LogCritical | Critical | 严重错误,可能导致系统不可用 |
使用示例
基本用法
// 信息级别 — 记录正常流程
sdk.Logger.LogInformation("脚本开始执行,数据ID: {Id}", entityId);
// 警告级别 — 记录异常情况但不影响主流程
sdk.Logger.LogWarning("发现数据异常,字段值为空: {Field}", fieldName);
// 错误级别 — 记录失败信息及异常详情
try
{
await DoSomething();
}
catch (Exception ex)
{
sdk.Logger.LogError(ex, "处理出错,数据ID: {Id}, 错误: {Message}", entityId, ex.Message);
}
结构化日志
支持占位符 {Name} 形式的结构化日志,便于后续日志检索和分析:
// 推荐:使用结构化占位符
sdk.Logger.LogInformation("用户 {UserId} 执行了 {Action} 操作,结果: {Result}",
userId, actionName, result);
// 不推荐:字符串拼接(不利于日志搜索和分析)
sdk.Logger.LogInformation($"用户 {userId} 执行了 {actionName} 操作");
作用域(Scope)
可以使用作用域将一组日志关联起来:
using (sdk.Logger.BeginScope("ProcessingOrder {OrderId}", orderId))
{
sdk.Logger.LogInformation("开始处理");
// ... 业务逻辑
sdk.Logger.LogInformation("处理完成");
}
典型场景
脚本执行全流程日志
public async Task<object> ExecuteAsync(ComponentContext context, ChameleonSDK sdk)
{
var entityId = context.CurrentEntity.Id;
sdk.Logger.LogInformation("[{ScriptName}] 开始执行,实体: {EntityCode}, 数据ID: {DataId}",
nameof(ChameleonCSharpScript), context.MetaObject.Code, entityId);
try
{
var result = await ProcessBusinessLogic(context, sdk);
sdk.Logger.LogInformation("[{ScriptName}] 执行完成,数据ID: {DataId}",
nameof(ChameleonCSharpScript), entityId);
return result;
}
catch (Exception ex)
{
sdk.Logger.LogError(ex, "[{ScriptName}] 执行失败,数据ID: {DataId}, 错误: {Error}",
nameof(ChameleonCSharpScript), entityId, ex.Message);
throw;
}
}