跳到主要内容

Logger

Logger 提供标准的结构化日志记录能力,基于 Microsoft.Extensions.Logging。在 C# 脚本或微服务开发中,可以通过它输出不同级别的日志信息。

使用方式​

public ILogger<ChameleonSDK> Logger => serviceProvider.GetRequiredService<ILogger<ChameleonSDK>>();

日志级别​

方法级别说明
LogTraceTrace最详细的跟踪日志,通常仅在开发调试时启用
LogDebugDebug调试信息
LogInformationInformation常规信息日志(最常用)
LogWarningWarning警告信息,表示潜在问题
LogErrorError错误信息,表示操作失败
LogCriticalCritical严重错误,可能导致系统不可用

使用示例​

基本用法​

// 信息级别 — 记录正常流程
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;
}
}