Posted in

Go服务CPU飙升却无日志?(生产环境Tracing盲区大起底)

第一章:Go服务CPU飙升却无日志?(生产环境Tracing盲区大起底)

当线上Go服务CPU突然飙至95%以上,pstacktop -H 显示大量goroutine处于runtime.futexruntime.mcall状态,而应用日志却安静如初——这并非偶发故障,而是典型Tracing盲区在作祟:Go的默认pprof和标准日志不采集goroutine阻塞根源、不关联HTTP请求链路、不标记GC停顿上下文。

常见盲区场景

  • HTTP handler中隐式同步调用(如未设超时的http.DefaultClient.Do
  • sync.Mutex争用未暴露在trace span中(pprof mutex profile需显式开启)
  • time.Sleep被误用为“等待条件”,实则掩盖了channel或context漏用
  • CGO调用阻塞(如SQLite、OpenSSL)完全脱离Go runtime trace视图

快速定位三步法

  1. 启用全量运行时trace:

    # 在启动命令中加入(生产环境建议采样率1/100)
    GODEBUG=gctrace=1 go run -gcflags="-l" main.go &
    # 或直接采集trace文件
    go tool trace -http=localhost:8080 trace.out  # 需先生成 trace.out
  2. 检查goroutine泄漏:

    curl "http://localhost:6060/debug/pprof/goroutine?debug=2" | \
    grep -E "(running|syscall)" | wc -l  # 持续>500需警惕
  3. 关联HTTP请求与trace:在handler中注入trace ID

    func handler(w http.ResponseWriter, r *http.Request) {
    // 从request context提取或生成trace ID
    traceID := r.Header.Get("X-Trace-ID")
    if traceID == "" {
        traceID = uuid.New().String()
    }
    // 写入结构化日志(非printf!)
    log.Printf("TRACE_ID=%s METHOD=%s PATH=%s START", traceID, r.Method, r.URL.Path)
    }

关键配置检查表

组件 必须启用项 生产风险提示
net/http Server.ReadTimeout/WriteTimeout 缺失将导致goroutine永久挂起
pprof /debug/pprof/trace?seconds=30 避免seconds>60引发OOM
runtime GODEBUG=schedtrace=1000 仅调试期启用,输出到stderr

真正的可观测性始于承认:日志不是真相的副本,而是开发者对真相的假设。

第二章:Go原生可观测性能力深度解构

2.1 runtime/pprof:CPU Profile采集原理与火焰图反向定位实战

Go 运行时通过信号中断(SIGPROF)实现采样,每 10ms 触发一次内核态到用户态的栈捕获。

采样触发机制

内核定时器驱动 SIGPROF 信号,Go runtime 的信号处理函数 sigprof 被调用,安全地抓取当前 Goroutine 栈帧。

数据同步机制

采样数据写入无锁环形缓冲区(profBuf),由后台 goroutine 定期 flush 到 pprof.Profile 实例。

// 启动 CPU profile(需在程序启动后、退出前调用)
f, _ := os.Create("cpu.pprof")
pprof.StartCPUProfile(f)
defer pprof.StopCPUProfile() // 必须显式停止,否则阻塞

StartCPUProfile 启用信号采样并注册 SIGPROF handler;f 必须可写且生命周期覆盖整个采样期;StopCPUProfile 关闭采样并刷新剩余数据。

字段 含义 典型值
Duration 采样总时长 30s
SampleRate 每秒采样次数 100Hz(即 10ms/次)
Samples 实际采集样本数 2987
graph TD
    A[Timer: 10ms] --> B[SIGPROF signal]
    B --> C[runtime.sigprof]
    C --> D[Capture stack trace]
    D --> E[Append to profBuf]
    E --> F[Flush to cpu.pprof]

2.2 net/http/pprof:生产环境安全暴露接口的配置陷阱与动态启用方案

默认暴露风险

net/http/pprof 在注册时若未限定路由前缀或绑定监听地址,会全局暴露 /debug/pprof/ 下全部端点(如 /goroutine?debug=1),极易被扫描利用。

安全注册方式

// 仅在 localhost 绑定调试路由,避免公网暴露
if os.Getenv("ENV") == "dev" {
    mux := http.NewServeMux()
    mux.Handle("/debug/pprof/", http.HandlerFunc(pprof.Index))
    mux.Handle("/debug/pprof/cmdline", http.HandlerFunc(pprof.Cmdline))
    http.ListenAndServe("127.0.0.1:6060", mux) // 严格绑定回环地址
}

此代码强制限制监听地址为 127.0.0.1,且仅在 ENV=dev 时加载;pprof.Index 提供入口导航页,pprof.Cmdline 暴露启动参数(需谨慎评估是否启用)。

动态开关控制表

控制方式 生产可用 热启支持 安全性
环境变量开关
HTTP 头令牌验证
TLS 客户端证书 极高

访问控制流程

graph TD
    A[HTTP 请求] --> B{Host/IP 匹配 127.0.0.1?}
    B -->|否| C[403 Forbidden]
    B -->|是| D{X-Debug-Token 是否有效?}
    D -->|否| C
    D -->|是| E[转发至 pprof.Handler]

2.3 trace包底层机制:goroutine调度事件捕获与trace.Event自定义埋点实践

Go 运行时通过 runtime/trace 模块在关键调度路径(如 newprocgoparkgoready)插入轻量级事件钩子,由 traceEvent 函数统一写入环形缓冲区。

调度事件捕获原理

Go 1.20+ 中,traceGoSched, traceGoPark, traceGoUnpark 等宏被编译为内联汇编调用 trace.fastPath,绕过函数调用开销,直接写入预分配的 per-P trace buffer。

自定义埋点实践

import "runtime/trace"

func processTask() {
    // 开启用户任务事件域
    ctx, task := trace.NewTask(context.Background(), "processTask")
    defer task.End()

    trace.Log(ctx, "stage", "decode") // 关键阶段标记
    // ...业务逻辑
}
  • trace.NewTask 创建嵌套事件节点,生成 GoCreate, GoStart, GoEnd 调度链;
  • trace.Log 写入 UserLog 事件,支持键值对,最大长度 64 字节(超长截断)。

事件类型对比

事件类型 触发时机 是否可自定义 数据结构
GoSched 主动让出 CPU goroutine ID + PC
UserLog trace.Log() 调用 string key/value
UserRegion trace.WithRegion 区域 起止时间戳 + name
graph TD
    A[goroutine 执行] --> B{是否调用 trace.Log?}
    B -->|是| C[写入 UserLog 到当前 P 的 traceBuf]
    B -->|否| D[运行时自动注入 GoPark/GoUnpark]
    C & D --> E[trace.Writer 流式消费 ring buffer]

2.4 go tool trace可视化分析:从Goroutine执行流到Syscall阻塞链路还原

go tool trace 是 Go 运行时提供的深度可观测性工具,可捕获 Goroutine、网络 I/O、Syscall、GC 等全生命周期事件。

启动 trace 分析流程

# 编译并运行程序,生成 trace 文件
go run -gcflags="all=-l" main.go &  # 禁用内联便于追踪
GODEBUG=schedtrace=1000 ./main &
# 或直接使用 runtime/trace 包
go run -gcflags="all=-l" -ldflags="-s -w" main.go

-gcflags="all=-l" 禁用内联确保 Goroutine 栈帧可追溯;GODEBUG=schedtrace=1000 每秒输出调度器快照(非 trace 文件,仅辅助验证)。

关键事件链路还原能力

事件类型 可定位问题 关联维度
GoCreate Goroutine 泄漏源 parent ID → child ID
GoBlockSyscall 阻塞式系统调用(如 open/read) syscall name + fd
GoUnblock 唤醒时机与调度延迟 P idle time / preemption

Goroutine 阻塞传播路径(mermaid)

graph TD
    G1[Goroutine 123] -->|calls| Syscall[read on fd=7]
    Syscall -->|blocks on| Kernel[Kernel wait queue]
    Kernel -->|wakes up when| IO[Disk/Network ready]
    IO -->|triggers| Unblock[GoUnblock event]
    Unblock -->|reschedules| G1

通过 go tool trace trace.out 打开 Web UI,点击「Goroutine analysis」可逐帧回溯阻塞起因与恢复路径。

2.5 GC与Scheduler trace交叉分析:识别GC触发抖动与P窃取异常导致的CPU尖刺

当Go程序出现毫秒级CPU尖刺时,单一trace难以定位根因。需将runtime/trace中GC事件(GCStart/GCDone)与调度器事件(ProcStatusChangeGoPreempt)在时间轴上对齐。

关键诊断信号

  • GC Stop-The-World阶段重叠P被强制剥夺(procstatuschange: idle → running后立即go preempt
  • 某个P在GC标记期间持续空转(runqempty + findrunnable超时)

典型trace片段解析

// go tool trace -http=:8080 trace.out
// 在浏览器中打开后,筛选事件:GCStart, GCDone, ProcStatusChange, GoPreempt

该命令启动Web界面,支持按时间范围过滤双轨事件;-http端口可避免端口冲突。

GC与P状态交叉表

时间戳(ms) 事件类型 P ID 状态变化 关联GC周期
124.87 GCStart 17
124.91 ProcStatusChange 3 running → idle 17
124.93 GoPreempt 3 17

调度异常流程图

graph TD
    A[GCStart] --> B{P处于running?}
    B -->|Yes| C[强制P idle → 抢占G]
    B -->|No| D[标记并发进行]
    C --> E[runqempty频发 → CPU空转尖刺]

第三章:OpenTelemetry Go SDK工程化落地关键路径

3.1 Context传播与Span生命周期管理:避免context.Background()误用引发的trace丢失

在分布式追踪中,context.Background() 是无父上下文的“根”,若在本应继承请求上下文的位置误用,将导致 Span 脱离 trace 链,造成断链。

常见误用场景

  • HTTP handler 中未从 r.Context() 提取 span,而直接 span := tracer.Start(context.Background(), ...)
  • Goroutine 启动时未传递带 span 的 context,导致子任务 trace 丢失

正确传播模式

func handler(w http.ResponseWriter, r *http.Request) {
    ctx := r.Context() // ✅ 继承请求携带的 trace context
    span := tracer.Start(ctx, "http.handler") // 自动关联 parent span
    defer span.End()

    go processAsync(span.Context()) // ✅ 传入 span.Context()
}

span.Context() 返回含 SpanContext 的 context,确保下游调用可延续 traceID 和 parentID;若传 context.Background(),则新建孤立 trace。

错误用法 后果
tracer.Start(context.Background(), ...) 新建 trace,丢失父子关系
go work(context.Background()) 异步任务脱离当前 trace
graph TD
    A[HTTP Request] --> B[ctx with Span]
    B --> C[tracer.Start(ctx, ...)]
    C --> D[span.Context()]
    D --> E[goroutine / RPC call]
    E --> F[Child Span]

3.2 自动instrumentation与手动埋点协同策略:HTTP/gRPC/DB层的零侵入增强实践

在生产环境中,自动instrumentation提供开箱即用的链路采集能力,但面对业务语义丰富的场景(如订单履约状态、风控决策分支),需通过轻量级手动埋点补全上下文。

协同设计原则

  • 自动采集基础指标(HTTP状态码、gRPC延迟、DB执行耗时)
  • 手动埋点仅注入业务标识(span.SetTag("order_id", orderID)
  • 两者共享同一Span生命周期,避免跨Context传播开销

HTTP层零侵入增强示例

# 在OpenTelemetry SDK中注册自定义处理器
from opentelemetry.instrumentation.wsgi import collect_request_attributes

def enriched_request_attrs(environ):
    attrs = collect_request_attributes(environ)
    # 注入业务路由语义(不修改原始environ)
    if path := environ.get("PATH_INFO"):
        attrs["http.route_semantic"] = "/api/v1/order" if "/order" in path else "other"
    return attrs

该函数扩展了默认采集字段,http.route_semantic为业务自定义标签,由WSGI中间件透明调用,无需修改业务路由代码。

gRPC与DB层协同埋点对比

层级 自动采集项 手动增强点 传播方式
gRPC rpc.method, status.code span.SetTag("tenant_id", ctx.tenant) Context Carrier
DB db.statement, db.operation span.SetAttribute("shard_key", user_id) SQL注释注入
graph TD
    A[HTTP入口] --> B[自动捕获Request/Response]
    B --> C{是否含关键业务ID?}
    C -->|是| D[手动注入order_id/tag]
    C -->|否| E[跳过,保留自动span]
    D --> F[统一导出至后端]

3.3 Exporter选型与采样率调优:Jaeger/OTLP/Zipkin在高吞吐场景下的性能压测对比

在万级TPS微服务链路追踪场景中,Exporter的序列化开销、网络传输效率与后端协议兼容性成为瓶颈关键。

压测环境配置

  • 负载:5000 traces/sec(平均span数12,payload均值840B)
  • 网络:单机双10Gbps网卡绑定,MTU=9000
  • 后端:Elasticsearch 8.12(索引模板预热完成)

协议性能对比(P99延迟 & CPU占用)

Exporter P99发送延迟 Go runtime GC压力 吞吐稳定性(±5%波动)
Jaeger Thrift over UDP 12.3ms
OTLP/gRPC (gzip) 8.7ms 中(压缩线程争用) ✅✅✅
Zipkin JSON over HTTP/1.1 41.6ms 高(频繁alloc) ❌(丢包率2.1%)
# otel-collector-config.yaml 关键调优项
exporters:
  otlp:
    endpoint: "otel-collector:4317"
    tls:
      insecure: true
    sending_queue:
      queue_size: 5000          # 缓冲区扩容防瞬时洪峰
    retry_on_failure:
      enabled: true
      max_elapsed_time: 30s     # 避免长尾重试拖垮pipeline

该配置将OTLP exporter的背压响应时间从12.8s降至queue_size与max_elapsed_time协同控制内存驻留span生命周期。增大队列需同步调高collector接收缓冲区(--mem-ballast-size-mib=512),否则OOM Kill风险陡增。

数据同步机制

graph TD A[SDK生成Span] –> B{采样决策} B –>|Always| C[全量导出] B –>|Rate 1/100| D[随机丢弃99%] B –>|TraceID Hash| E[保底关键链路]

采样策略需与Exporter吞吐能力对齐:OTLP/gRPC支持动态采样头透传,而Zipkin需依赖客户端预采样——后者在流量突增时易导致采样率失真。

第四章:生产级Tracing盲区攻坚实战

4.1 异步任务与goroutine泄漏追踪:使用pprof + trace + goroutine dump三联诊断法

当服务长期运行后内存持续增长、runtime.NumGoroutine() 单调上升,极可能遭遇 goroutine 泄漏——即协程启动后因通道阻塞、等待未关闭的 timer 或死锁而永不退出。

三联诊断协同逻辑

graph TD
    A[pprof/goroutines] -->|定位活跃协程栈| B[trace]
    B -->|时间线精确定位阻塞点| C[goroutine dump]
    C -->|人工比对栈帧共性| D[定位泄漏根因]

关键诊断命令组合

  • curl -s "http://localhost:6060/debug/pprof/goroutine?debug=2" → 全量 goroutine 栈快照
  • go tool trace -http=:8080 trace.out → 可视化调度/阻塞事件
  • go tool pprof http://localhost:6060/debug/pprof/goroutine → 交互式栈聚合分析

典型泄漏代码示例

func leakyWorker(ch <-chan int) {
    for range ch { // 若ch永不关闭,此goroutine永驻
        process()
    }
}
// 启动后未关闭ch → goroutine无法退出
go leakyWorker(dataCh)

该协程在 ch 永不关闭时陷入永久阻塞读,pprof/goroutine 中将反复出现相同栈帧,trace 可见其长期处于 GC sweep waitchan receive 状态。

4.2 CGO调用与系统调用盲区突破:perf + bpftrace + Go symbol映射联合分析

Go 程序中 CGO 调用(如 C.mallocC.read)会绕过 Go 运行时调度器,导致 pprof 无法追踪其栈帧,形成系统调用盲区。传统 perf record -e syscalls:sys_enter_read 只能捕获内核入口,却丢失 Go 调用上下文。

关键协同机制

  • perf script 提取带 --call-graph dwarf 的 CGO 帧(需 -gcflags="-g" 编译)
  • bpftrace 实时挂钩 syscall::read:entry 并读取用户栈(ustack
  • go tool pprof -symbolize=exec + go tool build -buildmode=exe 保留 DWARF 符号

符号映射核心命令

# 生成含完整符号的二进制(禁用 stripped)
go build -gcflags="-N -l" -ldflags="-s -w" -o app .

# perf 采集(含用户栈展开)
perf record -e 'syscalls:sys_enter_read' --call-graph dwarf,1024 ./app

# bpftrace 实时关联 Go goroutine ID(需 runtime/trace 支持)
bpftrace -e '
syscall::read:entry {
  printf("PID %d GID %d → %s\n", pid, ustack[1], ustack);
}'

该命令中 ustack[1] 指向 CGO 调用点(如 C.read),ustack 后续帧需通过 addr2line -e app 映射到 Go 源码行;dwarf,1024 指定最大栈深度以覆盖嵌套 CGO 调用。

工具 作用域 盲区覆盖能力 依赖条件
perf 内核+用户栈 ⚠️ 需 DWARF -gcflags="-N -l"
bpftrace 实时 syscall ✅ goroutine ID libbcc + uprobes
pprof 符号重写 ✅ Go 函数名 未 strip 的二进制
graph TD
    A[Go main.go] -->|CGO call| B[C.read]
    B --> C[sys_enter_read kprobe]
    C --> D{bpftrace 获取 ustack}
    D --> E[perf DWARF stack unwind]
    E --> F[pprof 符号映射 → main.go:42]

4.3 中间件与框架Hook缺失补全:gin/echo/gorm等主流组件的自定义Span注入实践

主流Go Web框架(如Gin、Echo)和ORM(如GORM)默认不透传OpenTracing/OpenTelemetry上下文,导致Span链路断裂。需在关键生命周期点手动注入。

Gin请求链路补全

通过gin.HandlerFunc注入Span,捕获traceparent头:

func TracingMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        ctx := otel.GetTextMapPropagator().Extract(
            c.Request.Context(),
            propagation.HeaderCarrier(c.Request.Header),
        )
        span := trace.SpanFromContext(ctx)
        // 注入span到gin context,供后续handler使用
        c.Set("span", span)
        c.Next()
    }
}

propagation.HeaderCarrier实现HTTP头部读取;c.Set("span", span)使下游Handler可获取活跃Span,避免context丢失。

GORM钩子注入

利用gorm.SessionAfterFind/AfterSave钩子注入DB Span:

钩子类型 触发时机 Span作用域
BeforeCreate INSERT前 DB操作子Span
AfterQuery SELECT后 查询延迟标记

跨组件协同流程

graph TD
    A[HTTP Request] --> B[Gin Middleware]
    B --> C[Extract TraceID]
    C --> D[Attach to Context]
    D --> E[GORM Hook]
    E --> F[Annotate DB Span]

4.4 日志-Trace-ID强关联实现:zap/slog结构化日志与span.Context的无缝绑定方案

核心挑战

在分布式追踪中,日志与 span 生命周期脱节是 Trace-ID 丢失主因。需在日志写入瞬间自动注入当前 span 的 trace_id、span_id 及 trace_flags。

关键实现路径

  • 封装 context.Context 携带 trace.SpanContext
  • 替换日志字段注入器为 ctx.Value() 动态提取
  • 适配 zap(zapcore.Core)与 slog(slog.Handler)双引擎

zap 上下文日志增强示例

func NewZapTraceCore(core zapcore.Core) zapcore.Core {
    return zapcore.WrapCore(core, func(entry zapcore.Entry, fields []zapcore.Field) []zapcore.Field {
        if span := trace.SpanFromContext(entry.Logger.Core().With([]zapcore.Field{}).Logger.WithOptions(zap.AddCaller()).Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field{}).Logger.Core().With([]zapcore.Field

## 第五章:从Tracing盲区到SRE可观测性闭环

在某大型电商中台的双十一大促压测期间,订单履约服务出现偶发性 3.2s 延迟,Prometheus 报警显示 P99 响应时间突增,但指标曲线平滑、日志无 ERROR 级别记录,Jaeger 中仅 17% 的 Span 携带完整上下文——其余请求因异步线程池、消息队列消费、定时任务触发等场景丢失 traceId,形成典型的 Tracing 盲区。

#### 构建跨执行模型的上下文透传链路  
团队在 Spring Cloud Alibaba 2.2.9.RELEASE 基础上,扩展 `TraceThreadLocal` 支持 `ScheduledThreadPoolExecutor` 的 `decorateTask` 钩子,并为 RocketMQ 的 `MessageListenerConcurrently` 注入 `MDC` 与 `traceId` 双通道。关键代码如下:

```java
public class TraceAwareMessageListener implements MessageListenerConcurrently {
    @Override
    public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
        String traceId = Optional.ofNullable(msgs.get(0).getUserProperty("TRACE_ID"))
                .orElse(UUID.randomUUID().toString());
        MDC.put("traceId", traceId);
        Tracer.activeSpan().setTag("mq_topic", msgs.get(0).getTopic());
        // 后续业务逻辑...
        return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
    }
}

定义 SLO 驱动的异常检测黄金信号

基于用户真实旅程(如“下单→支付→发货”),定义四维黄金信号矩阵:

维度 指标示例 SLO 目标 数据来源
延迟 下单链路 P95 ≤ 800ms 99.5% Jaeger + 自研链路聚合器
错误 支付回调 HTTP 5xx 比率 99.95% Nginx 日志 + OpenTelemetry Collector
流量 履约服务 QPS ≥ 12,000(大促基线) 100% Prometheus + Service Mesh metrics
饱和度 Kafka 消费组 lag 99.9% Burrow API + 自定义 exporter

构建自动归因决策树

当履约服务 P99 超阈值时,系统触发以下归因流程(mermaid flowchart TD):

flowchart TD
    A[告警触发] --> B{是否伴随 DB 连接池耗尽?}
    B -->|是| C[检查 HikariCP activeConnections]
    B -->|否| D{Kafka 消费 lag 是否 > 1000?}
    D -->|是| E[定位 lag 最高 topic:order_fulfillment]
    D -->|否| F[分析 JVM GC 时间占比]
    C --> G[扩容连接池并回滚最近 SQL 优化]
    E --> H[调整消费者并发数 + 重平衡策略]
    F --> I[触发 jfr 录制 + Arthas watch 内存热点]

实施闭环验证机制

在灰度环境中部署“可观测性健康度看板”,集成三个核心验证项:

  • 每分钟校验 traceId 在日志、metrics、traces 三端匹配率,低于 98.5% 自动触发 otel-collector 配置热更新;
  • 对每个 SLO 指标绑定自动修复预案:例如当 order_fulfillment lag 持续 2 分钟超阈值,自动调用 Kubernetes API 扩容 fulfillment-consumer Deployment 副本至 12;
  • 每日生成《链路完整性报告》,统计跨服务调用中 span.kind=client 与对应 span.kind=server 的配对缺失率,驱动 SDK 升级节奏。

该闭环上线后,大促期间平均故障定位时长从 18.7 分钟缩短至 216 秒,Tracing 上下文覆盖率从 17% 提升至 99.3%,且所有修复动作均通过 GitOps Pipeline 记录审计轨迹。

擅长定位疑难杂症,用日志和 pprof 找出问题根源。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注