You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在运行时获取aws-logging-dotnet的LogStreamName值?

获取aws-logging-dotnet生成的LogStreamName合规方案

方案1:利用Serilog日志上下文读取

aws-logging-dotnet的Serilog集成中,AWSCloudWatchSink生成LogStreamName后,会自动将其注入到Serilog的LogContext中,键名为LogStreamName。你可以在日志输出后通过以下代码读取:

using Serilog.Context;

// 在第一条日志发送之后执行
if (LogContext.Properties.TryGetValue("LogStreamName", out var value))
{
    var logStreamName = value.ToString().Trim('"');
    // 使用获取到的日志流名称
}

注意:该值仅在第一条日志成功发送后才会被初始化,过早读取会返回null。

方案2:自定义LogStreamName生成逻辑

放弃依赖库的默认生成规则,提前自定义并存储LogStreamName,再在配置中指定:

  1. 生成并持久化日志流名称(比如存入单例类或应用配置):
// 示例:基于实例ID和时间戳生成
public static class LogStreamConfig
{
    public static string CurrentLogStreamName { get; } = $"app-instance-{Environment.GetEnvironmentVariable("INSTANCE_ID")}-{DateTime.UtcNow:yyyyMMddHHmmss}";
}
  1. 在Serilog的JSON配置中指定该名称:
{
  "Serilog": {
    "WriteTo": [
      {
        "Name": "AWSCloudWatch",
        "Args": {
          "logStreamName": "#{LogStreamConfig.CurrentLogStreamName}",
          "logGroupName": "your-log-group",
          // 其他配置项
        }
      }
    ]
  }
}

这种方式完全可控,你可以在应用任意位置直接读取LogStreamConfig.CurrentLogStreamName。

方案3:通过AWS SDK查询匹配日志流

如果前两种方式不适用,可借助AWS CloudWatch Logs SDK查询日志流列表,结合实例标识(如EC2实例ID、容器ID)匹配目标日志流:

using Amazon.CloudWatchLogs;
using Amazon.CloudWatchLogs.Model;

public async Task<string> GetTargetLogStream(string logGroupName)
{
    var client = new AmazonCloudWatchLogsClient();
    var request = new DescribeLogStreamsRequest
    {
        LogGroupName = logGroupName,
        OrderBy = OrderBy.LastEventTime,
        Descending = true,
        Limit = 10
    };
    var response = await client.DescribeLogStreamsAsync(request);
    
    var instanceIdentifier = Environment.GetEnvironmentVariable("INSTANCE_ID");
    return response.LogStreams.FirstOrDefault(s => s.LogStreamName.Contains(instanceIdentifier))?.LogStreamName;
}

此方法需要为实例配置logs:DescribeLogStreams的IAM权限,且依赖日志流名称包含实例标识的规则。

内容的提问来源于stack exchange,提问作者Marco Merola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:47:07