phptek / silverstripe-sentry

Flexible Sentry compatible bug aggregation client for Silverstripe applications.
BSD 3-Clause "New" or "Revised" License
12 stars 22 forks source link

Manual logging mis-labels reports #69

Closed phptek closed 3 years ago

phptek commented 3 years ago

The resulting report in Sentry itself when. manually invoking $logger->info() is incorrectly labelled:

Scenario #1

// No `log_level` set in local `logging.yml`
$logger = Injector::inst()->createWithArgs(Logger::class, ['error-log'])
    ->pushHandler(SentryHandler::create());

$logger->info('THIS IS A TEST: INFO'); // Not reported
$logger->warn('THIS IS A TEST: WARN'); // OK
$logger->error('THIS IS A TEST: ERROR'); // OK

Scenario #2

// No `log_level` set in local `logging.yml`

$logger = Injector::inst()->get(LoggerInterface::class);

$logger->info('THIS IS A TEST: INFO'); // Not reported
$logger->warn('THIS IS A TEST: WARN'); // Not reported
$logger->error('THIS IS A TEST: ERROR'); // Not reported

Scenario #3

// `log_level` set in local `logging.yml` to “DEBUG”

$logger = Injector::inst()->createWithArgs(Logger::class, ['error-log'])
    ->pushHandler(SentryHandler::create());

$logger->info('THIS IS A TEST: INFO'); // OK (Reported as “error” though)
$logger->warn('THIS IS A TEST: WARN'); // OK
$logger->error('THIS IS A TEST: ERROR'); // OK

Scenario #4

// `log_level` set in local `logging.yml` to “INFO”

$logger = Injector::inst()->createWithArgs(Logger::class, ['error-log'])
    ->pushHandler(SentryHandler::create());

$logger->info('THIS IS A TEST: INFO'); // OK (Reported as “error” though)
$logger->warn('THIS IS A TEST: WARN'); // OK
$logger->error('THIS IS A TEST: ERROR'); // OK
phptek commented 3 years ago

The following logic looks suspect. The string log_level being passed into SentryHandler isn't being correctly converted for a start - thos fixes that:

        // Override minimum log level through configuration
        if ($defaultLevel = SentryHandler::config()->get('log_level')) {
            $level = $defaultLevel;
        }

        $level = SentrySeverity::process_severity($level);

        parent::__construct($level, $bubble);

...but only data from error() is reported when attempting to invoke info(), warn() and error() consecutively, or independently.

phptek commented 3 years ago

Closing as fixed in 4.0.0-alpha2 and above.