📙
iLogtail用户手册
1.8.4
1.8.4
  • 关于
    • 什么是iLogtail
    • 发展历史
    • 产品优势
    • 开源协议
    • 社区版和企业版的对比说明
  • 安装
    • 快速开始
    • Docker使用
    • Kubernetes使用
    • 守护进程
    • 发布记录
    • 支持的操作系统
    • 源代码
      • 下载
      • 编译
      • Docker镜像
      • 编译依赖
    • 镜像站
  • 概念
    • 关键概念
    • 数据流水线
  • 配置
    • 采集配置
    • 系统参数
    • 日志
  • 数据流水线
    • 概览
    • 插件版本管理
    • 输入
      • 文本日志
      • 脚本执行数据
      • 容器标准输出
      • 文本日志(debug)
      • MetricInput示例插件
      • 主机Meta数据
      • Mock数据-Metric
      • eBPF网络调用数据
      • 主机监控数据
      • MySQL Binlog
      • GO Profile
      • GPU数据
      • HTTP数据
      • ServiceInput示例插件
      • Journal数据
      • Kafka
      • Mock数据-Service
      • SqlServer 查询数据
      • OTLP数据
      • PostgreSQL 查询数据
      • Syslog数据
    • 处理
      • 添加字段
      • 添加云资产信息
      • 原始数据
      • 数据脱敏
      • 丢弃字段
      • 字段加密
      • 条件字段处理
      • 日志过滤
      • Go时间格式解析
      • Grok
      • Json
      • 日志转SLS Metric
      • 正则
      • 重命名字段
      • 分隔符
      • 键值对
      • 多行切分
      • 字符串替换
    • 聚合
      • 基础
      • 上下文
      • 按Key分组
      • 按GroupMetadata分组
    • 输出
      • Kafka(Deprecated)
      • kafkaV2
      • ClickHouse
      • ElasticSearch
      • SLS
      • 标准输出/文件
      • OTLP日志
      • Pulsar
      • HTTP
      • Loki
    • 加速
      • 分隔符加速
      • Json加速
      • 正则加速
  • 工作原理
    • 文件发现
    • 插件系统
  • 可观测性
    • 日志
  • 开发者指南
    • 开发环境
    • 日志协议
      • 协议转换
      • 增加新的日志协议
      • 协议
        • sls协议
        • 单条协议
    • 代码风格
    • 数据模型
    • 插件开发
      • 开源插件开发引导
      • Checkpoint接口
      • Logger接口
      • 如何开发Input插件
      • 如何开发Processor插件
      • 如何开发Aggregator插件
      • 如何开发Flusher插件
      • 如何生成插件文档
      • 插件文档规范
      • 纯插件模式启动
    • 测试
      • 单元测试
      • E2E测试
    • 代码检查
      • 检查代码规范
      • 检查文件许可证
      • 检查依赖包许可证
  • 贡献指南
    • 贡献指南
    • 开发者
    • 成就
  • 性能测试
    • 容器场景iLogtail与Filebeat性能对比测试
  • 管控工具
    • 使用介绍
    • 通信协议
    • 开发指南
  • Awesome iLogtail
    • 走近iLogtail社区版
    • iLogtail社区版使用入门
    • iLogtail社区版开发者指南
    • iLogtail社区版使用案例
Powered by GitBook
On this page
  • 打印采集配置元信息
  • 测试中使用Logger
  • 一般用法
  • 高级用法-自定义Logger
  • 高级用法-读取日志内容
  • 启动时控制日志行为
  • 调整日志级别
  • 是否开启控制台打印
  1. 开发者指南
  2. 插件开发

Logger接口

PreviousCheckpoint接口Next如何开发Input插件

Last updated 1 year ago

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

打印采集配置元信息

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

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

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))
}

启动时控制日志行为

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

调整日志级别

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

./ilogtail --logger-level=debug

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

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

是否开启控制台打印

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

./ilogtail --logger-console=true

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

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

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

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