是否可以在运行时更新 zap 记录器的日志级别?

2023-11-27

我创建了一个记录器kubebuilder,它基于 zap 记录器:

import (
    "flag"
    "github.com/gin-gonic/gin"
    "net/http"
    "os"
    "go.uber.org/zap/zapcore"
    uzap "go.uber.org/zap"
    // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.)
    // to ensure that exec-entrypoint and run can make use of them.
    _ "k8s.io/client-go/plugin/pkg/client/auth"

    "k8s.io/apimachinery/pkg/runtime"
    utilruntime "k8s.io/apimachinery/pkg/util/runtime"
    clientgoscheme "k8s.io/client-go/kubernetes/scheme"
    ctrl "sigs.k8s.io/controller-runtime"
    "sigs.k8s.io/controller-runtime/pkg/healthz"
    "sigs.k8s.io/controller-runtime/pkg/log/zap"

)

var (
    scheme   = runtime.NewScheme()
    setupLog = ctrl.Log.WithName("setup")
)

var zapOpts []uzap.Option
    zapOpts = append(zapOpts, uzap.AddCaller())
    zapOpts = append(zapOpts, uzap.AddCallerSkip(1))
    zapOpts = append(zapOpts, uzap.AddStacktrace(uzap.DebugLevel))

    opts := zap.Options{
        Development:     developmentFlag,
        StacktraceLevel: stacktraceLevel,
        Level:           level,
        Encoder:         encoder,
        ZapOpts:  zapOpts,
    }

    opts.BindFlags(flag.CommandLine)
    flag.Parse()

    ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))

现在我想将日志级别更改为zapcore.InfoLevel在运行时。我没有找到任何SetLogLevel或类似的API。

我需要创建新选项然后设置新级别吗?

我还需要设置记录器sigs.k8s.io/controller-runtime/pkg/log/zap图书馆。记录器的接口来自go-logr它实现了logr.Logger界面。如果我尝试将其更改为zapcore.NewCore我无法设置记录器ctrl.SetLogger不再了。

我想保留更新所有选项的选项zap.Options并且还要更改日志级别,并且仍然使用 zapsigs.k8s.io/controller-runtime/pkg/log/zap.

是否可以这样做sigs.k8s.io/controller-runtime/pkg/log/zap and sigs.k8s.io/controller-runtime?


Yes 有可能的 using AtomicLevel。来自文档:

atom := zap.NewAtomicLevel()

// To keep the example deterministic, disable timestamps in the output.
encoderCfg := zap.NewProductionEncoderConfig()
encoderCfg.TimeKey = ""

logger := zap.New(zapcore.NewCore(
    zapcore.NewJSONEncoder(encoderCfg),
    zapcore.Lock(os.Stdout),
    atom,
))
defer logger.Sync()

logger.Info("info logging enabled")
atom.SetLevel(zap.ErrorLevel)
logger.Info("info logging disabled")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在运行时更新 zap 记录器的日志级别? 的相关文章

  • 如何使用 GOPATH 的 Samba 服务器位置?

    我正在尝试将 GOPATH 设置为共享网络文件夹 当我进入 export GOPATH smb path to shared folder I get go GOPATH entry is relative must be absolute
  • 如何为所有 API 端点全局设置 http.ResponseWriter Content-Type 标头?

    我是 Go 新手 现在正在用它构建一个简单的 API package main import encoding json fmt github com gorilla mux github com gorilla handlers log
  • 如何将接口转换为接口切片?

    我的输入是interface 而且我知道它可以是任何类型的数组 我想读取我输入的元素之一 所以我尝试将我的interface 进入一个 interface 但是 go 会给我以下错误 恐慌 接口转换 interface 是 map stri
  • 与通道相比,sync.WaitGroup 的优势是什么?

    我正在开发一个并发 Go 库 我偶然发现了 goroutine 之间两种不同的同步模式 其结果相似 等待组 https play golang org p ZYPLlcp16TZ package main import fmt sync t
  • 在 Go to 函数中通过引用和值传递

    我对 Go 中通过引用和值传递有点困惑 我已经看到过对类型前面的 的解释 在类型名称前面 表示声明的变量将存储该类型的另一个变量的地址 而不是该类型的值 类型 这对我来说毫无意义 在Java中 如果我将数据库实例传递给函数 我会这样做 da
  • 是否可以在 C/C++ 中模仿 Go 接口?

    在 Go 中 如果类型具有接口定义的所有方法 则可以将其分配给该接口变量 而无需显式继承它 是否可以在 C C 中模仿此功能 是的 您可以使用纯抽象类 并使用模板类来包装 实现 抽象类的类型 以便它们扩展抽象类 这是一个简单的示例 incl
  • golang无法启动调试,显示未找到框架CoreFoundation

    我使用的是 Macbook pro m1 在数据迁移或更新到 monterey 后 不确定是什么原因导致的 golang 似乎无法调试或 go list 编译 我尝试重新安装 更新 golang 结果是一样的 Go版本 1 17 3 dar
  • jQuery.ajax() 记录 HTTP 请求

    我有一个发送 HTTP POST 请求的函数 我想记录它以进行调试 这是函数 function serverRequest URL DATA callback ajax url URL type POST dataType text con
  • 记录类名、方法名和行号的性能影响

    我正在我的 java 应用程序中实现日志记录 以便我可以调试应用程序投入生产后可能出现的潜在问题 考虑到在这种情况下 人们不会奢侈地使用 IDE 开发工具 以调试模式运行事物或单步执行完整代码 因此在每条消息中记录类名 方法名和行号将非常有
  • 在 pyqt4 应用程序中记录所有异常

    使用标准 python 日志记录 api 记录 pyqt4 应用程序中的所有异常的最佳方法是什么 我尝试将 exec 包装在 try except 块中 并记录其中的异常 但它只记录应用程序初始化时的异常 作为临时解决方案 我将最重要的方法
  • ASP.NET Core 日志记录在 2 个不同的文件中

    当使用默认的 ASP NET core 日志记录与 Serilog 结合使用时 是否可以将错误写入errors log并将信息写入informations log using Microsoft Extensions Logging usi
  • 指针上定义的方法仍然可以用值调用

    Effective Go 文档说明如下 关于接收者的指针与值的规则是 可以在指针和值上调用值方法 但只能在指针上调用指针方法 http tip golang org doc effective go html pointers vs val
  • 将中间件与 Golang Gorilla mux 子路由器结合使用

    如何将中间件应用到 Go 中大猩猩工具包 http www gorillatoolkit org 多路复用器子路由器 我有以下代码 router mux NewRouter StrictSlash true apiRouter router
  • json.Unmarshal json字符串到对象是空结果[重复]

    这个问题在这里已经有答案了 我有一个非常简单的程序 如下所示 package main import encoding json fmt type RunCommand struct level string json level call
  • 如何在 C# 中重构 log4net 语句?

    好吧 读完丹本对此的回答后post https stackoverflow com questions 2230180 whats log4j actually doing when we turn on or off some log p
  • 如何读取 UDP 连接直至超时?

    我需要读取 UDP 流量 直到超时 我可以通过在 UDPConn 上调用 SetDeadline 并循环直到出现 I O 超时错误来做到这一点 但这看起来很黑客 基于错误条件的流量控制 下面的代码片段看起来更正确 但并没有终止 在生产中 这
  • 扭曲的日志记录到屏幕(标准输出)不起作用

    我有这个小程序取自这里 https twistedmatrix com documents 16 3 0 core howto logger html usage for emitting applications from twisted
  • cf.net 异常和其他日志记录

    我想向在 WM6 Pro 上运行的 cf net 应用程序添加一些日志记录功能 我正在研究记录异常和一些更敏感的代码部分 我希望将日志存储在本地 即在设备上 并将它们可靠地上传到服务器 它们需要排队 我的应用程序偶尔会连接 有谁知道 log
  • 如何将 NLog 用于 DLL

    我正在尝试使用 Nlog Refresh 1 0 为类库项目实现一个简单的日志 当 nlog 从 dll 中实例化时 它似乎不会创建日志文件 还有其他办法解决这个问题吗 我的配置文件如下所示
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9

随机推荐

  • 等效的隐式运算符:为什么它们是合法的?

    Update 请参阅下面我对 C 规范的一部分的剖析 我想我一定错过了一些东西 因为me看起来我在这个问题中描述的行为实际上违反了规范 更新2 好吧 经过进一步思考 并根据一些评论 我想我现在明白发生了什么 规范中的 源类型 一词指的是正在
  • 迭代器上的 Scala 映射不会产生副作用

    为什么会这样 scala gt List 1 2 3 4 iterator map x Int gt println x 不打印出来 1 2 3 4 while List 1 2 3 4 map x Int gt println x Lis
  • 如何将系统麦克风音频流传输到连接设备麦克风音频流

    I am trying to attach USB device used for tele calling which have pnp sound controller for mic and speaker Now i have tw
  • Spring Boot with Security OAuth2 - 如何通过 Web 登录表单使用资源服务器?

    I have 春季启动 1 2 1 RELEASE 服务的应用程序OAuth2 2 0 6 RELEASE 授权和资源服务器位于一个应用程序实例中 它使用自定义UserDetailsService实现利用MongoTemplate在 Mon
  • Pandas:列的指数平滑函数

    我有以下包含交易数据的 DataFrame df pd DataFrame Trader Carl Mark Carl Joe Mark Carl Max Max split Quantity 5 2 5 10 1 5 2 1 Date D
  • Javascript 和反斜杠替换

    这是我的字符串 var str This is my string 这是我的代码 var replaced str replace 我无法让我的输出为 This is my string 我已经尝试了我能想到的正则表达式和替换值的所有组合
  • 在meteor.js 中处理发布数据的简单方法?

    我需要在我的meteor js 应用程序中处理一些POST 数据 有没有一种简单的方法可以做到这一点 非常基本 如果它是一个 PHP 应用程序 我只需要 POST 变量 流星路由器 https github com tmeasday met
  • 如何确定 Apache 运行时的用户和组?

    在 DreamHost 共享主机上 我正在设置 htpasswd 但 Apache 无权读取该文件 我如何授予它权限 我想更改所有者或组 htpasswd文件而不是授予它不安全的权限 我认为我无权访问httpd conf文件 所以我不能使用
  • 将 ResourceProcessor 迁移到 HATEOAS 1.0.0 M1

    在我当前的 Spring HATEOAS 0 25 1 RELEASE 项目中 我大量使用资源处理器接口 Bean public ResourceProcessor
  • 使用 chunksize 迭代获取推断的数据帧类型

    如何使用 pd read csv 迭代地对文件进行分块并 保留数据类型和其他元信息 就像我阅读了整个内容一样 一次数据集 我需要读取太大而无法装入内存的数据集 我想使用 pd read csv 导入文件 然后立即将块附加到 HDFStore
  • JavaFX:设置文本控件的背景颜色

    我正在使用 TextFlow 和一些文本项来显示样式文本 但我找不到一种方法来设置简单的背景颜色Text items 我可以设置填充颜色和字体 但它没有设置其背景颜色的 java 方法或 css 属性 基于此solution 这是一种为所有
  • 如何在flutter中显示交付更新的进度条

    i wanna add a progress bar in my app but i dont know how to do this thing i just a beginer for flutter and wanna learn h
  • Nodejs中的AES 256 GCM加密解密

    我正在nodejs中实现一组基本的加密 解密函数 并且在解密部分不断收到以下错误 Error Unsupported state or unable to authenticate data 到目前为止 这是我的代码 import cryp
  • 让 CMake 在 Windows 上找到 flex

    我正在尝试在项目中使用 flex 并且我正在尝试使用 CMake 将 flex 与我的项目链接起来 我在网上找到了我正在使用的 FindFLEX cmake 你可以找到它here 默认情况下 这应该在 CMake 中 但我认为不是 我的目录
  • 导入字符串值中包含逗号的 CSV

    我正在尝试将一个简单的 CSV 导入 Postgres 8 4 数据库 这是一个表 CREATE TABLE public sample a VARCHAR b VARCHAR WITHOUT OIDS 以下是 CSV 文件示例 foo b
  • 支持 JSON 数组的 Hive JSON SerDe

    我尝试过 Amazon 为 EMR 实例提供的 JSON SerDe 如果您需要将 JSON 字典字段寻址 映射到列 它会非常有效 但是我无法弄清楚如何对 JSON 数组执行相同的操作 例如 如果有一个 JSON 数组如下 23123 32
  • Symfony2 和 Doctrine:如何获取同一个 id 的两个不同对象?

    我有这样的场景 对象 A 对其他对象 B C D 有一些引用 对象 B 对其他对象 A F G 有一些引用 对象 C 对其他对象 A 有一些引用 等等 在我的代码中 出于临时原因 我需要制作一个对象 比如A 的 副本 不 我不能使用不同的结
  • SSE / EventSource 在第一个数据块后关闭(Rails 4 + Puma + Nginx)

    我跟着401 ActionController LiveRailscast 和这个博客文章 about Server Sent Events在我的 Rails 应用程序中设置类似的东西 当我仅使用时打开与服务器的连接时 它工作得很好puma
  • JavaFX 组合框样式

    我需要 javaFX 中的一个组合框 其弹出行为可以控制 例如单击组合框时 而不是显示下拉列表的默认行为 我希望下拉列表显示在组合框上方 组合框下方显示的插入 是否可以 我们可以用 css 做到这一点吗 谢谢你的帮助 我希望这对你有用 根据
  • 是否可以在运行时更新 zap 记录器的日志级别?

    我创建了一个记录器kubebuilder 它基于 zap 记录器 import flag github com gin gonic gin net http os go uber org zap zapcore uzap go uber o