---
# System prepended metadata

title: springboot opensearch
tags: [chatgpt]

---

# springboot opensearch

[TOC]

###### tags: `chatgpt`

---

## 將 Spring Boot 專案的 log 輸出到 AWS OpenSearch

要將 Spring Boot 專案的 log 輸出到 AWS OpenSearch，可以遵循以下步驟：

1. 在 AWS 上創建 OpenSearch 服務。

2. 確認 Spring Boot 專案使用了 Log4j 2 作為日誌系統，並添加 `log4j2-elasticsearch` 依賴。

```xml
<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-api</artifactId>
	<version>2.14.1</version>
</dependency>

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.14.1</version>
</dependency>

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-slf4j-impl</artifactId>
	<version>2.14.1</version>
</dependency>

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j2-elasticsearch</artifactId>
	<version>7.16.0</version>
</dependency>
```

3. 編輯 `log4j2.xml` 配置文件，配置 OpenSearch 的 **appender**。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
	<Appenders>
		<Elasticsearch name="elasticsearch" >
			<Properties>
				<Property name="cluster">my_cluster</Property>
				<Property name="hosts">https://my-search-domain.us-west-2.es.amazonaws.com</Property>
				<Property name="index">my_index</Property>
				<Property name="indexDateFormat">yyyy-MM-dd</Property>
				<Property name="type">_doc</Property>
				<Property name="user">my_user</Property>
				<Property name="password">my_password</Property>
			</Properties>
		</Elasticsearch>
	</Appenders>
	<Loggers>
		<Root level="info">
			<AppenderRef ref="elasticsearch" />
		</Root>
	</Loggers>
</Configuration>
```

注意修改 `Properties` 中的 `cluster`、`hosts`、`index`、`user` 和 `password` 為自己的 OpenSearch 資訊。

4. 在 Spring Boot 專案中啟用 **log4j2**。

在 `src/main/resources` 目錄下新增 `log4j2.component.properties` 文件，添加以下配置：

```properties
name=log4j2
class=org.apache.logging.log4j.core.impl.Log4jContextFactory
```

在 `src/main/resources` 目錄下新增 `log4j2.xml` 文件，添加以下配置：

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
	<Appenders>
		<Console name="Console" target="SYSTEM_OUT">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
		</Console>
	</Appenders>
	<Loggers>
		<Root level="info">
			<AppenderRef ref="Console"/>
		</Root>
	</Loggers>
</Configuration>
```

運行 Spring Boot 專案，即可將日誌輸出到 AWS OpenSearch 中

## 但專案使用的是 SLF4J

若 Spring Boot 專案使用 SLF4J 作為日誌系統，則需要額外添加 `slf4j-log4j12` 依賴，並將 `log4j2.xml` 配置文件中的 `Appender` 改為使用 SLF4J 的 **appender**。

確認 Spring Boot 專案使用了 SLF4J 作為日誌系統，並添加 `slf4j-log4j12` 依賴。

```xml
<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-api</artifactId>
	<version>1.7.32</version>
</dependency>

<dependency>
	<groupId>org.slf4j</groupId>
	<artifactId>slf4j-log4j12</artifactId>
	<version>1.7.32</version>
</dependency>

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j-core</artifactId>
	<version>2.14.1</version>
</dependency>

<dependency>
	<groupId>org.apache.logging.log4j</groupId>
	<artifactId>log4j2-elasticsearch</artifactId>
	<version>7.16.0</version>
</dependency>
```

2. 編輯 `log4j2.xml` 配置文件，配置 SLF4J 的 `appender`。

```xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
	<Appenders>
		<Elasticsearch name="elasticsearch" >
			<Properties>
				<Property name="cluster">my_cluster</Property>
				<Property name="hosts">https://my-search-domain.us-west-2.es.amazonaws.com</Property>
				<Property name="index">my_index</Property>
				<Property name="indexDateFormat">yyyy-MM-dd</Property>
				<Property name="type">_doc</Property>
				<Property name="user">my_user</Property>
				<Property name="password">my_password</Property>
			</Properties>
		</Elasticsearch>
		<Console name="console" target="SYSTEM_OUT">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
		</Console>
		<SLF4J name="slf4j" level="info">
			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
		</SLF4J>
	</Appenders>
	<Loggers>
		<Root level="info">
			<AppenderRef ref="elasticsearch" />
			<AppenderRef ref="console" />
			<AppenderRef ref="slf4j" />
		</Root>
	</Loggers>
</Configuration>
```

注意修改 Properties 中的 `cluster`、`hosts`、`index`、`user` 和 `password` 為自己的 OpenSearch 資訊。

運行 Spring Boot 專案，即可將日誌輸出到 AWS OpenSearch 中。
