Sentry 와 연동하기
Sentry는 다양한 언어와 플랫폼과 연동을 지원하고 있으며 온 프레미스 방식의 연동 목록은 https://docs.getsentry.com/on-premise/ 에서 확인할 수 있습니다.
Sentry의 공식 연동 클라이언트는 Raven 이라고 부르며 지원하는 언어를 뒤에 붙여서 명명하며 예로 루비의 경우 Raven-ruby, 자바는 raven-java 가 됩니다.
다양한 언어를 지원하므로 연동은 그리 어렵지 않아 보이며 API를 사용하기 위해서는 DSN이라고 부르는 token이 포함된 URL을 알고 있어야 하며
프로젝트를 선택한 후 Settings 을 선택합니다.
하단의 Client Keys(DSN) 을 클릭하면 키를 확인할 수 있습니다.
PHP
PHP SDK 문서는 https://docs.getsentry.com/on-premise/clients/php/ 에서 제공합니다.
Laravel
https://github.com/jenssegers/laravel-raven 에서 php-raven을 래핑한 라라벨 패키지를 제공하며 일반적인 라라벨 패키지처럼 설치하면 됩니다.
연동
패키지 설치
composer require jenssegers/raven
CODEapp/config.php 에 프로바이더 등록
app/config.php
'providers' => [ Jenssegers\Raven\RavenServiceProvider::class, ], 'aliases' => [ 'Raven' => Jenssegers\Raven\Facades\Raven::class, ],
PHPconfig/services.php 에 추가
'raven' => [ 'dsn' => env('RAVEN_DSN'), 'level' => env('LOG_LEVEL'), ],
CODE.env 에 DSN과 로그 레벨 설정을 추가합니다.
RAVEN_DSN=<key>:<secret>@app.getsentry.com/<project> LOG_LEVEL=debug
CODE
services.php 에 raven 항목과 .env 에 RAVEN_DSN 항목이 둘 다 설정되어 있어야 동작하며 (RavenServiceProvider::register() 참고) 하나만 설정되어 있으면 예외가 발생하고 아예 로그가 남지 않으니 주의해야 합니다.
만약 설치만 하고 사용하지 않을 경우 위 두 항목을 모두 설정하지 말아야 합니다.
RavenServiceProvider
if (! getenv('RAVEN_DSN') and ! $this->app['config']->get('services.raven')) {
return;
}
Exception Handler
Sentry 에서 수집하려면 app 에서 명시적으로 Log 파사드로 로깅을 남겨야 되며 예외가 발생할 경우 Sentry 에 남지 않습니다.
라라벨의 기본 예외 처리 핸들러에 다음과 같이 raven 기능을 연동해 놓으면 app 수정없이 발생한 예외도 Sentry 에 남겨됩니다.
App\Exceptions\Handler.php
public function report(Exception $e)
{
$client = new \Raven_Client(env('RAVEN_DSN'));
$client->captureException($e);
parent::report($e);
}
Java
자바와 연동은 https://docs.getsentry.com/on-premise/clients/java/ 에서 확인할 수 있습니다.
Logback
pom.xml 에 다음 내용을 추가합니다.
<dependency>
<groupId>com.getsentry.raven</groupId>
<artifactId>raven-logback</artifactId>
<version>7.2.0</version>
</dependency>
이제 logback.xml 의 appender에 snetry를 추가합니다.
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<encoder>
<pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
</encoder>
</appender>
<!-- Sentry 설정 -->
<appender name="Sentry" class="com.getsentry.raven.logback.SentryAppender">
<dsn>https://<key>:<secret>@app.getsentry.com/<project>?options</dsn>
<tags>tag1:value1,tag2:value2</tags>
<!-- Optional, allows to select the ravenFactory -->
<!--<ravenFactory>com.getsentry.raven.DefaultRavenFactory</ravenFactory>-->
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
<appender-ref ref="Sentry"/>
</root>
</configuration>