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
app/config.php 에 프로바이더 등록
app/config.php'providers' => [ Jenssegers\Raven\RavenServiceProvider::class, ], 'aliases' => [ 'Raven' => Jenssegers\Raven\Facades\Raven::class, ],
config/services.php 에 추가
'raven' => [ 'dsn' => env('RAVEN_DSN'), 'level' => env('LOG_LEVEL'), ],
.env 에 DSN과 로그 레벨 설정을 추가합니다.
RAVEN_DSN=<key>:<secret>@app.getsentry.com/<project> LOG_LEVEL=debug
services.php 에 raven 항목과 .env 에 RAVEN_DSN 항목이 둘 다 설정되어 있어야 동작하며 (RavenServiceProvider::register() 참고) 하나만 설정되어 있으면 예외가 발생하고 아예 로그가 남지 않으니 주의해야 합니다.
만약 설치만 하고 사용하지 않을 경우 위 두 항목을 모두 설정하지 말아야 합니다.
if (! getenv('RAVEN_DSN') and ! $this->app['config']->get('services.raven')) { return; }
Exception Handler
Sentry 에서 수집하려면 app 에서 명시적으로 Log 파사드로 로깅을 남겨야 되며 예외가 발생할 경우 Sentry 에 남지 않습니다.
라라벨의 기본 예외 처리 핸들러에 다음과 같이 raven 기능을 연동해 놓으면 app 수정없이 발생한 예외도 Sentry 에 남겨됩니다.
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>