如果想將應用程式的作業記錄、作業系統日誌、使用者日誌等上傳到Log Service,您可以使用Log ServiceJava SDK提供的PutLogs方法。本文主要介紹使用Log ServiceJava SDK將日誌寫入到Log Service的操作步驟。
前提條件
您已完成以下操作:
使用限制
aliyun-log-producer底層調用PutLogs介面上傳日誌,每次可以寫入的原始日誌大小存在限制。更多資訊,請參見資料讀寫。
Log Service的基礎資源,包括建立Project個數、Logstore個數、Shard個數、LogtailConfig個數、機器組個數、單個LogItem大小、LogItem(Key)長度和LogItem(Value)長度等均存在限制。更多資訊,請參見基礎資源使用限制。
代碼首次運行後,請在Log Service控制台開啟日誌庫索引,等待一分鐘後,進行查詢。
在控制台進行日誌查詢時,當單個欄位值長度超過最大長度時,超出部分被截斷,不參與分析。更多資訊,請參考建立索引。
普通寫入&指定位置寫入
public PutLogsResponse PutLogs(String project, String logStore,
String topic, List<LogItem> logItems, String source,
String shardHash)參數說明
參數 | 類型 | 是否必填 | 說明 |
project | String | 是 | 目標Project。 |
logStore | String | 是 | 目標LogStore。 |
topic | String | 否 | 日誌主題。 |
logItems | List | 是 | 要發送的日誌/日誌列表。寫入日誌的格式為LogItem。 |
source | String | 否 | 發送源。 說明 如果留空或沒有指定,該欄位將被賦予producer所在宿主機的IP。 |
shardHash | String | 否 | 日誌寫入位置的HashID。 |
程式碼範例
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.common.LogContent;
import com.aliyun.openservices.log.common.LogItem;
import com.aliyun.openservices.log.exception.LogException;
import java.util.ArrayList;
import java.util.List;
public class PutLogsTest {
public static void main(String[] args) throws LogException {
/**
* 本樣本從環境變數中擷取AccessKey ID和AccessKey Secret。
*/
String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
/**
* Log Service的服務存取點。此處以杭州為例,其它地區請根據實際情況填寫。
*/
String host = "cn-hangzhou.log.aliyuncs.com";
/**
* 建立Log ServiceClient。
*/
Client client = new Client(host, accessId, accessKey);
String project = "ali-peoject-test";
String logStore = "test-logstore";
String topic = "";
String source = "";
LogContent logContent = new LogContent("message", "2021-05-15 16:43:35 ParameterInvalid 400\n" +
"com.aliyun.openservices.log.exception.LogException:The body is not valid json string.\n" +
"at com.aliyun.openservices.log.Client.ErrorCheck(Client.java:2161)\n" +
"at com.aliyun.openservices.log.Client.SendData(Client.java:2312)\n" +
"at com.aliyun.openservices.log.Client.PullLogsk(Client.java:1397)\n" +
"at com.aliyun.openservices.log.Client.SendData(Client.java:2265)\n" +
"at com.aliyun.openservices.log.Client.GetCursor(Client.java:1123)\n" +
"at com.aliyun.openservices.log.Client.PullLogs(Client.java:2161)\n" +
"at com.aliyun.openservices.log.Client.ErrorCheck(Client.java:2426)\n" +
"at transformEvent.main(transformEvent.java:2559)");
List<LogItem> logItems = new ArrayList<>();
for (int i = 0; i < 5; ++i) {
LogItem logItem = new LogItem();
logItem.PushBack("language", "android");
logItem.PushBack("time", String.valueOf(System.currentTimeMillis()));
logItem.PushBack(logContent);
logItems.add(logItem);
}
client.PutLogs(project, logStore, topic, logItems, source, null);
}
}後續步驟
用Java SDK查詢日誌,請參見使用GetLogs介面查詢日誌。
使用API查詢日誌,請參見GetLogsV2。
使用Log Service控制台查詢日誌,請參見查詢與分析快速指引。
相關文檔
使用Java SDK建立Project和LogStore,請參見Java SDK快速入門。
需要將日誌進行壓縮、批量上傳日誌到Log Service,請參見使用Aliyun Log Java Producer寫入日誌資料。
在使用Java SDK操作過程中,若服務端返回結果中包含錯誤資訊,則表示調用介面失敗。您可以參考API錯誤碼對照表尋找對應的解決方案。更多資訊,請參見API錯誤處理對照表。