# 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 中。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up