You need to enable JavaScript to run this app.
文档中心
日志服务

日志服务

复制全文
Java SDK
通过 Java SDK 写入日志
复制全文
通过 Java SDK 写入日志

Java Producer 用于海量数据场景下快速发送日志数据。本文档通过示例代码演示如何通过 Java Producer 采集日志数据。

前提条件

  • 已安装日志服务 Java SDK。更多信息,请参见安装 Java SDK
  • 已添加 VOLCENGINE_ACCESS_KEY_ID 等环境变量。环境变量的配置方式请参考配置身份认证信息

    注意

    推荐通过环境变量动态获取火山引擎密钥等身份认证信息,以免 AccessKey 硬编码引发数据安全风险。

写入日志

场景说明

本文档通过示例代码演示如何通过 SDK 写入日志数据到日志服务。Java SDK 支持通过以下方式写入日志:

写入方式

说明

PutLogs

不推荐。
日志服务支持通过 PutLogs 接口同步请求的方式上传日志。如果选择使用 PutLogs 上传日志,建议您一次性聚合多条日志后调用一次 PutLogs 接口。相对于逐条上传日志的方式,日志聚合后上传可以提升吞吐率并避免触发限流。

Producer

推荐。
在实际生产环境中,为了提高数据写入效率,建议通过 Java Producer 方式写入日志数据。Producer 用于在海量数据、高并发场景下快速发送日志数据,具有异步发送、高性能、失败重试、优雅关闭等特性。

示例代码

通过 Java Producer 采集日志数据的示例代码如下。如需通过 PutLogs 接口写入日志数据,可参考快速开始

package com.volcengine.example.tls.demo;

import com.volcengine.model.tls.LogItem;
import com.volcengine.model.tls.exception.LogException;
import com.volcengine.model.tls.producer.CallBack;
import com.volcengine.model.tls.producer.ProducerConfig;
import com.volcengine.model.tls.producer.Result;
import com.volcengine.service.tls.Producer;
import com.volcengine.service.tls.ProducerImpl;

import java.util.ArrayList;
import java.util.List;


public class Demo {
    public static void main(String[] args) throws LogException, InterruptedException {
        // 初始化客户端,推荐通过环境变量动态获取火山引擎密钥等身份认证信息,以免 AccessKey 硬编码引发数据安全风险。详细说明请参考https://www.volcengine.com/docs/6470/1166455
        // 使用 STS 时,ak 和 sk 均使用临时密钥,且设置 VOLCENGINE_TOKEN;不使用 STS 时,VOLCENGINE_TOKEN 部分传空
        ProducerConfig producerConfig = new ProducerConfig(System.getenv("VOLCENGINE_ENDPOINT"), System.getenv("VOLCENGINE_REGION"),
            System.getenv("VOLCENGINE_ACCESS_KEY_ID"), System.getenv("VOLCENGINE_ACCESS_KEY_SECRET"), System.getenv("VOLCENGINE_TOKEN"));
        // 实例化并启动Producer
        Producer producer = new ProducerImpl(producerConfig);
        producer.start();

        // 请根据您的需要,填写topicId、source、filename
        String topicID = "your-topic-id";
        String source = "your-log-source";
        String filename = "your-log-filename";
        // 如果您不需要回调处理,Producer提供的sendLogV2和sendLogsV2接口的callback参数传入null即可
        CallBack callBack = new CallBack() {
            @Override
            public void onComplete(Result result) {
                System.out.println("producer result:" + result);
            }
        };

        LogItem item;

        // 调用Producer的sendLogV2接口,一次提交一条日志
        item = new LogItem();
        item.setTime(System.currentTimeMillis());
        item.addContent("key1", "value1");
        item.addContent("key2", "value2");
        producer.sendLogV2("", topicID, source, filename, item, callBack);

        // 调用Producer的sendLogsV2接口,一次提交多条日志
        List<LogItem> items = new ArrayList<>();
        for (int i = 1; i <= 1000; i++) {
            item = new LogItem();
            item.setTime(System.currentTimeMillis());
            item.addContent("key1", "value1-" + i);
            item.addContent("key2", "value2-" + i);
            items.add(item);
        }
        producer.sendLogsV2("", topicID, source, filename, items, callBack);

        // 关闭Producer
        producer.close();
    }
}

相关文档

  • 通过 SDK 发送调用 API 的请求以后,您会收到服务端的响应,如果响应中包含 200 以外的状态码,表示接口调用失败。您可以参考各个 API 的文档查看对应的错误码信息。
  • 关于 Java Producer 的详细信息,请参考 Java Producer
  • 关于 Java Producer 上传日志的完整示例代码,请参考 TLS Java SDK Demo on GitHub
最近更新时间:2023.11.27 15:29:23
这个页面对您有帮助吗?
有用
有用
无用
无用