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

NLog Seq日志目标抛出连接被强制关闭异常求助

解决NLog连接Seq时出现的“远程主机强制关闭连接”错误

针对C#微服务通过NLog向Seq发送日志时频繁出现的SocketException (10054)错误,以下是具体的排查和解决方向:

1. 优化HTTP连接池配置

这个错误大多和连接复用冲突有关:.NET默认会复用HTTP连接,但Seq服务器或中间网络设备(防火墙、负载均衡)可能主动关闭空闲连接,客户端复用已失效的连接就会触发报错。可以通过自定义SocketsHttpHandler调整连接池参数:

NLog.config配置方式

<target xsi:type="Seq" name="seq" serverUrl="http://your-seq-server:5341" apiKey="your-api-key">
  <transport xsi:type="Http">
    <clientHandler type="System.Net.Http.SocketsHttpHandler">
      <!-- 缩短空闲连接超时,避免被远端提前关闭 -->
      <property name="PooledConnectionIdleTimeout" value="00:01:00" />
      <!-- 启用保活探测,及时识别失效连接 -->
      <property name="KeepAlivePingTimeout" value="00:00:30" />
      <property name="EnableMultipleHttp2Connections" value="true" />
    </clientHandler>
  </transport>
</target>

代码注册方式

var seqTarget = new SeqTarget
{
    ServerUrl = "http://your-seq-server:5341",
    ApiKey = "your-api-key",
    Transport = new HttpTransport
    {
        ClientHandler = new SocketsHttpHandler
        {
            PooledConnectionIdleTimeout = TimeSpan.FromMinutes(1),
            KeepAlivePingTimeout = TimeSpan.FromSeconds(30)
        }
    }
};

2. 检查Seq服务器状态与配置

  • 登录Seq管理后台,查看System > Diagnostics页面,确认是否存在CPU、内存过载,或连接数达到上限的情况。
  • 若为自托管Seq,可调整MaximumConnectionCount参数,提升并发连接处理能力。
  • 开启日志压缩(Seq默认支持),减少单批次传输的数据量,降低连接压力。

3. 调整NLog批量发送策略

过大的日志批量或过长的刷新间隔可能导致连接被限流或超时,修改Seq目标的批量参数:

<target xsi:type="Seq" name="seq" serverUrl="http://your-seq-server:5341" apiKey="your-api-key">
  <!-- 减小单批次发送的日志数量 -->
  <batchSize value="100" />
  <!-- 缩短刷新间隔,避免日志堆积 -->
  <flushTimeout value="2000" />
</target>

4. 排查网络中间设备

防火墙、负载均衡器、代理服务器常是连接中断的诱因:

  • 检查设备的空闲连接超时设置,确保其超时时间长于客户端的PooledConnectionIdleTimeout,或主动缩短客户端超时适配设备规则。
  • 确认是否有QoS流量限制,避免日志传输被限流。
  • 若使用HTTPS连接,排查证书有效性及TLS检查规则,排除证书问题导致的间接连接关闭。

5. 启用NLog重试与队列保护

开启重试机制,避免单次连接失败就抛出错误;同时配置异步队列的溢出策略,防止日志堆积:

<target xsi:type="AsyncWrapper" name="asyncSeq" overflowAction="Grow">
  <target xsi:type="Seq" name="seq" serverUrl="http://your-seq-server:5341" apiKey="your-api-key">
    <!-- 配置重试次数与间隔 -->
    <retries value="3" />
    <retryDelayMilliseconds value="1000" />
  </target>
</target>

6. 验证组件版本兼容性

  • 确认Seq服务器为最新版本,旧版本可能存在连接管理的已知bug。
  • 若使用较旧的.NET运行时,升级到.NET 6+,修复SocketsHttpHandler在连接复用中的部分问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:01:03