CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/LoongCollector/Logger接口
文档目录
开发环境代码风格数据模型(C++)数据模型(Golang)
开源插件开发引导
Logger接口Golang 自监控指标接口纯插件模式启动

LoongCollector

Logger接口

<https://github.com/alibaba/loongcollector/blob/main/pkg/logger/logger.go> Logger提供了DBG、INFO、WARN、ERR 4个级别的日志打印,每个级别分别提供kv和format形式打印接口。 其中WARN和ERR级别的alarmType参数,通常使用全大写XXXALARM。 基本使用示例 对于...

Logger接口

https://github.com/alibaba/loongcollector/blob/main/pkg/logger/logger.go

Logger提供了DBG、INFO、WARN、ERR 4个级别的日志打印,每个级别分别提供kv和format形式打印接口。

// kv form
func Debug(ctx context.Context, kvPairs ...interface{})
func Info(ctx context.Context, kvPairs ...interface{})
func Warning(ctx context.Context, alarmType string, kvPairs ...interface{})
func Error(ctx context.Context, alarmType string, kvPairs ...interface{})
// format form
func Debugf(ctx context.Context, format string, params ...interface{})
func Infof(ctx context.Context, format string, params ...interface{})
func Warningf(ctx context.Context, alarmType string, format string, params ...interface{})
func Errorf(ctx context.Context, alarmType string, format string, params ...interface{})

其中WARN和ERR级别的alarmType参数,通常使用全大写XXX_ALARM。

基本使用示例

func (p *plugin) func1() {
    logger.Debug(p.context.GetRuntimeContext(), "foo", "bar")
    logger.Warningf(p.context.GetRuntimeContext(), "TEST_ALARM", "msg %s", "param ignored")
}
2021-08-24 18:20:02 [DBG] [logger_test.go:174] [func1] [mock-configname,mock-logstore] foo:bar
2021-08-24 18:20:02 [WARN] [logger_test.go:175] [func1] [mock-configname,mock-logstore] AlarmType:TEST_ALARM msg param ignored

打印采集配置元信息

对于 LoongCollector,具有多租户的特点,可以支持多个采集配置同时工作;LoongCollector 支持将采集配置的元信息打印到日志中,便于问题的排查与定位。

import (
    "github.com/alibaba/ilogtail/pkg/logger"
)

以下代码块是一个插件所必备的内容,我们打印日志时仅需要将context.GetRuntimeContext() 传入logger包的第一个参数,打印效果如下,会自动附加采集配置与logstore 名称。

type plugin struct {
    context ilogtail.Context
}

func (p *plugin) func1() {
    logger.Debug(p.context.GetRuntimeContext(), "foo", "bar")
}

If config and logstore name in context:

2021-08-24 18:20:02 [DBG] [logger_test.go:174] [func1] [mock-configname,mock-logstore] foo:bar

If config and logstore name not in context:

2021-08-24 18:20:02 [DBG] [logger_test.go:174] [func1] foo:bar

测试中使用Logger

一般用法

对于大多数情况,只需要引入_ "github.com/alibaba/ilogtail/pkg/logger/test"包即可。

import (
    "context"
    "testing"

    "github.com/alibaba/ilogtail/pkg/logger"
    _ "github.com/alibaba/ilogtail/pkg/logger/test"
)

func Test_plugin_func1(t *testing.T) {
    logger.Info(context.Background(), "foo", "bar")
}

高级用法-自定义Logger

你可以使用logger.ConfigOption设置Logger 的行为,比如输出、日志级别、异步打印等。

package test

import (
    "context"
    "testing"

    "github.com/alibaba/ilogtail/pkg/logger"
)

func init() {
    logger.InitTestLogger(logger.OptionDebugLevel)
}

func Test_plugin_func1(t *testing.T) {
    logger.Debug(context.Background(), "foo", "bar")
}

高级用法-读取日志内容

某些单测下,开发者可能需要读取日志来验证代码的分支覆盖行为。在这种情况下可以使用logger.OptionOpenMemoryReceiver 参数。

import (
    "context"
    "strings"
    "testing"

    "github.com/alibaba/ilogtail/pkg/logger"
 
    "github.com/stretchr/testify/assert"
)

func init() {
    logger.InitTestLogger(logger.OptionOpenMemoryReceiver)
}

func Test_plugin_func1(t *testing.T) {
    logger.ClearMemoryLog()
    logger.Info(context.Background(), "foo", "bar")
    assert.Equal(t, 1, logger.GetMemoryLogCount())
    assert.Truef(t, strings.Contains(logger.ReadMemoryLog(1), "foo:bar"), "got %s", logger.ReadMemoryLog(1))
}

启动时控制日志行为

启动 LoongCollector 时,默认的日志行为是异步文件Info级别输出,如果需要动态调整,可以参考以下内容进行设置:

调整日志级别

启动时如果启动程序相对路径下没有 plugin_logger.xml 文件,则可以使用以下命令设置:

./loongcollector --logger-level=debug

如果存在 plugin_logger.xml 文件,可以修改文件,或使用以下命令强制重新生成日志配置文件:

./loongcollector --logger-level=info --logger-retain=false

是否开启控制台打印

默认生成环境关闭控制台打印,如果本地调试环境想开启控制台日志,相对路径下没有 plugin_logger.xml 文件,则可以使用以下命令:

./loongcollector --logger-console=true

如果存在 plugin_logger.xml 文件,可以修改文件,或使用以下命令强制重新生成日志配置文件:

./loongcollector --logger-console=true --logger-retain=false

文章大纲