콘텐츠로 이동

커스텀 통합 | Next.js용 Sentry

Source URL: https://docs.sentry.io/platforms/javascript/guides/nextjs/configuration/integrations/custom

SDK에 기본 포함된 통합 외에도, 커스텀 통합을 직접 작성할 수 있습니다.

커스텀 통합은 Integration interface를 따라야 합니다.

커스텀 통합은 다음과 같이 생성해 SDK에 추가할 수 있습니다:

function myAwesomeIntegration() {
return {
name: "MyAwesomeIntegration",
setup(client) {
// Do something when the SDK is initialized
// The client that is being setup is passed to the hook
},
};
}
Sentry.init({
// ...
integrations: [myAwesomeIntegration()],
});

통합의 모든 hook은 선택 사항입니다. 필수 필드는 name 하나뿐입니다. 커스텀 통합에서는 다음 hook 중 하나 또는 여러 개를 사용할 수 있습니다:

setup hook은 SDK가 초기화될 때 호출됩니다. 인자로 client 인스턴스를 받습니다. 초기화 시점에 코드를 실행하려면 이 hook을 사용해야 합니다.

const integration = {
name: "MyAwesomeIntegration",
setup(client) {
setupCustomSentryListener(client);
},
};

이 hook은 이벤트가 Sentry로 전송되기 전에 이벤트를 수정하는 데 사용할 수 있습니다. 인자로 event를 받고, 수정된 event를 반환해야 합니다. 또한 이 hook은 추가 이벤트 메타데이터를 담을 수 있는 hint 객체와, 이벤트를 전송하는 client도 함께 받습니다. 이벤트 전송을 중단하려면 null을 반환할 수도 있습니다.

const integration = {
name: "MyAwesomeIntegration",
processEvent(event, hint, client) {
event.extra = {
...event.extra,
myCustomTag: "value",
};
// Return the modified event,
// or return `null` to drop the event
return event;
},
};

event 또는 null로 resolve되는 promise를 반환할 수도 있습니다. 하지만 이벤트 전송을 지연시킬 수 있으므로 권장되지 않으며, 가능한 한 피해야 합니다.

이 hook은 processEvent와 유사하지만, 이벤트가 다른 processEvent hook으로 전달되기 전에 먼저 호출됩니다. 처리 순서가 중요한 경우에 사용할 수 있습니다.

대부분의 경우 processEvent만 사용하면 됩니다. 다른 processEvent hook보다 먼저 호출되어야 함을 보장해야 할 때만 preprocessEvent를 사용하세요.

processEvent와 마찬가지로, 이 hook도 event, hint, client를 인자로 받습니다. 다만 이 hook에서는 수정된 event를 반환하거나 이벤트를 중단하기 위한 null 반환이 허용되지 않습니다. 대신 전달된 event를 이 hook 내부에서 직접 변경만 할 수 있습니다:

const integration = {
name: "MyAwesomeIntegration",
preprocessEvent(event, hint, client) {
event.extra = {
...event.extra,
myCustomTag: "value",
};
// Nothing to return, just mutate the event
},
};

이 hook은 setup과 비슷하지만, SDK를 다시 초기화하더라도 한 번만 실행됩니다. 인자는 받지 않습니다. 일반적으로는 이것 대신 setup을 사용하는 것이 좋습니다. setupOnce를 써야 하는 유일한 이유는, 예를 들어 Sentry.init()를 여러 번 호출할 수 있는 상황에서 특정 코드가 정확히 한 번만 실행되도록 보장하려는 경우입니다.

const integration = {
name: "MyAwesomeIntegration",
setupOnce() {
wrapLibrary();
},
};

이 hook은 모든 통합에 대해 setupOnce()setup()이 호출된 뒤에 트리거됩니다. 다른 모든 통합이 먼저 실행된 뒤여야 중요한 경우에 사용할 수 있습니다.

대부분의 경우 이 hook은 필요하지 않으며, 대신 setup을 사용하면 됩니다.

이 hook은 첫 번째 인자로 설정 중인 client를 받습니다.

const integration = {
name: "MyAwesomeIntegration",
afterAllSetup(client) {
// We can be sure that all other integrations
// have run their `setup` and `setupOnce` hooks now
startSomeThing(client);
},
};