Skip to content

Commit

Permalink
FEATURE: Add README.d
Browse files Browse the repository at this point in the history
Resolves #6
  • Loading branch information
paxuclus committed Jan 31, 2021
1 parent da0b8e1 commit 041cc03
Showing 1 changed file with 145 additions and 0 deletions.
145 changes: 145 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# Netlogix.Sentry

## About
This package provides a Flow integration for the [sentry.io](https://sentry.io) PHP SDK. Some basic
information about the Flow application is added to the sentry Event by default, but you can easily
configure and extend this package to fit your needs.

## Installation
`composer require netlogix/sentry`

Currently the following Flow versions are supported:

* `^6.3`

## Setup

The sentry DSN Client Key has to be configured. Get it from your project settings (SDK Setup -> Client Keys (DSN)).
```yaml
Netlogix:
Sentry:
dsn: 'https://[email protected]/123456789'
```
Then simply run `./flow sentry:test` to log an exception to sentry.
While this is technically all you **have to** do, you might want to adjust the providers - see below.

## Configuration

This package allows you to configure which data should be added to the sentry event by changing the providers
for each scope. Currently, the available scopes are `environment`, `extra`, `release`, `tags` and `user`.

Providers can be sorted using the [PositionalArraySorter](https://github.com/neos/utility-arrays/blob/master/Classes/PositionalArraySorter.php#L15) position strings.
For the scopes `extra`, `tags` and `user`, all data provided will be merged together. The scopes `environment` and `release` only support a **single** value (you can still configure more than one provider, but the last one wins).


```yaml
Netlogix:
Sentry:
scope:
extra: []
release:
# If you don't need a specific order, you can simply set the provider to true
'Netlogix\Sentry\Scope\Release\PathPattern': true
tags:
# Numerical order can be used
'Netlogix\Sentry\Scope\Tags\FlowEnvironment': '10'
'Your\Custom\TagProvider': '20'
user:
'Your\Custom\UserProvider': 'start 1000'
# If you don't want to add the currently authenticated Flow Account to the Event, simply disable the provider
'Netlogix\Sentry\Scope\User\FlowAccount': false
```

## Environments
The sentry SDK will search for the environment variable `SENTRY_ENVIRONMENT` and use it's value as the current environment. This is still the default, however
you can configure the `Netlogix\Sentry\Scope\Environment\FlowSettings` provider to use a different value:

```yaml
Netlogix:
Sentry:
environment:
setting: '%env:SENTRY_ENVIRONMENT%'
```

## Release tracking
You can use the `Netlogix\Sentry\Scope\Release\PathPattern` `ReleaseProvider` to extract your current release from
the app directory. By default, the configured `pathPattern` is matched against the `FLOW_PATH_ROOT` constant:

````yaml
Netlogix:
Sentry:

# Used by Netlogix\Sentry\Scope\Release\PathPattern
release:
# Path to use for extraction of release
pathToMatch: '%FLOW_PATH_ROOT%'

# Pattern to extract current release from file path
# This pattern is matched against pathToMatch
pathPattern: '~/releases/(\d{14})$~'
````

## Custom Providers

For each scope, you can implement your own providers. Each scope requires it's own interface:

* Scope `environment` => `Netlogix\Sentry\Scope\Environment\EnvironmentProvider`
* Scope `extra` => `Netlogix\Sentry\Scope\Extra\ExtraProvider`
* Scope `release` => `Netlogix\Sentry\Scope\Release\ReleaseProvider`
* Scope `tags` => `Netlogix\Sentry\Scope\Tags\TagProvider`
* Scope `user` => `Netlogix\Sentry\Scope\User\UserProvider`

Then simply add them to the configuration.

## Manually logging exceptions to sentry

If you need to manually send exceptions to sentry (inside a `catch` block for example), you can use the
`Netlogix\Sentry\ThrowableStorage\SentryStorage`:

```php
<?php
use Neos\Flow\Annotations as Flow;
use Netlogix\Sentry\ThrowableStorage\SentryStorage;
class LoggingManually {
/**
* @Flow\Inject
* @var SentryStorage
*/
protected $sentryStorage;
public function log(): void {
$exception = new \RuntimeException('foo', 1612114936);
$this->sentryStorage->logThrowable($exception, ['some' => ['additional', 'data']]);
}
}
```

## Ignoring exceptions

If you need to skip sending a specific exception to sentry, you can use Flow's `renderingGroups`. Simply create one
that matches your exception and set `logException` to `false`:

```yaml
Neos:
Flow:
error:
exceptionHandler:
renderingGroups:
ignoredExceptions:
matchingStatusCodes: [418]
matchingExceptionClassNames: ['Your\Ignored\Exception']
options:
logException: false
```

Please note that this also disables logging of this exception to `Data/Logs/Exceptions`.

0 comments on commit 041cc03

Please sign in to comment.