logback:https://docs.sentry.io/platforms/java/guides/logback/
sentry-logback庫通過Appender為Sentry提供Logback支持,該Appender將記錄的異常發送給Sentry。配置此集成后,您還可以使用Sentry的靜態API(如使用情況頁面所示),以便執行記錄面包屑,設置當前用戶或手動發送事件等操作。
源可以在Github上找到。
注意:不再維護舊的raven-logback庫。強烈建議您遷移到sentry-logback(本文檔介紹)。有關更多信息,請查看遷移指南。如果您仍在使用raven-logback,可以在此處找到舊文檔。
一、logback的接入與測試
1、安裝
使用Gradle:
implementation 'io.sentry:sentry-logback:5.3.0'
2、配置
以下示例配置在INFO級別記錄到標准輸出的ConsoleAppender和在WARN級別記錄到Sentry服務器的SentryAppender。 ConsoleAppender僅作為非Sentry附加程序的示例提供,該附加程序設置為不同的日志記錄閾值,就像您可能已在項目中使用的那樣。
使用logback.xml格式的示例配置:
<appender name="Sentry" class="io.sentry.logback.SentryAppender"> <options> <!-- NOTE: Replace the test DSN below with YOUR OWN DSN to see the events from this app in your Sentry project/dashboard --> <dsn> https://examplePublicKey@o0.ingest.sentry.io/0</dsn> </options> <!-- Optionally change minimum Event level. Default for Events is ERROR --> <minimumEventLevel>WARN</minimumEventLevel> <!-- Optionally change minimum Breadcrumbs level. Default for Breadcrumbs is INFO --> <minimumBreadcrumbLevel>DEBUG</minimumBreadcrumbLevel> </appender>
接下來,您需要配置DSN(客戶端密鑰)以及可選的其他值,例如環境和發布。有關執行此操作的方法,請參閱配置頁。https://docs.sentry.io/platforms/java/guides/logback/
3、額外數據
由於Logback提供的MDC系統,可以為事件添加額外的數據。
4、關聯TAG
默認情況下,所有MDC參數都存儲在Sentry的“附加數據”選項卡下。通過在配置中指定mdctags選項,您可以選擇將哪些MDC密鑰作為標記發送,這樣就可以將它們用作Sentry UI中的過濾器。見下面的logWithExtras方法。
5、完整的測試代碼:
package com.transsnet.palmpay.sentry; import com.transsnet.palmpay.contract.ConstractTestBase; import org.joda.time.DateTime; import org.junit.Test; import org.slf4j.*; import org.springframework.boot.test.context.SpringBootTest; import java.util.LinkedList; import java.util.List; @SpringBootTest public class SentryTest extends ConstractTestBase { private static final Logger logger = LoggerFactory.getLogger(SentryTest.class); private static final Marker MARKER = MarkerFactory.getMarker("myMarker"); @Test public void logWarnSimpleMessage() { // This sends a simple event to Sentry logger.warn("This is a warn test"); } @Test public void logErrorSimpleMessage() { List list = new LinkedList<String>(); // This sends a simple event to Sentry logger.error("This is a error test"); } @Test public void logWithTag() { // This sends an event with a tag named 'logback-Marker' to Sentry logger.error(MARKER, "This is a test"); } @Test public void logWithExtras() { // MDC extras MDC.put("extra_key", "extra_value"); // This sends an event with extra data to Sentry logger.error("This is a extra_key test,at={}", new DateTime()); } @Test public void logException() { try { unsafeMethod(); } catch (Exception e) { // This sends an exception event to Sentry logger.error("Exception caught", e); } } public void unsafeMethod() { throw new UnsupportedOperationException("You shouldn't call this!"); } }
6、結果: