A PHP Exception Handler to Post Exceptions to a Slack Channel
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitignore
ExceptionHandler.php
LICENSE
README.md
composer.json

README.md

ExceptionHandler

A PHP Exception Handler to Post Exceptions to a Slack Channel

Installation

  • make sure your PHP Installation has curl loaded
  • create a Channel on Slack
  • create an Incoming Webook for your Slack Channel & copy the Integration Token.
  • add the Packagist Package to your composer.json
  • run composer update

Configuration

You need to configure this Class before you can use it:

ExceptionHandler::configure(
    array(
        'username'       => 'company',                  // Your Slack Subdomain (e.g. company.slack.com)
        'token'          => '<your token>',             // The Slack Integration Token
        'data_path'      => '/tmp',                     // The Path to store full Exception Traces in
        'webhookChannel' => '#exceptions',              // Your Slack Channel
        'webhookUser'    => 'exception',                // The Username who will post Messages
        'webhookIcon'    => ':ghost:',                  // The Icon for the Username (can be :ghost: or an URL)
        'hostname'       => php_uname('n'),             // The Hostname your Application is running on
        'version'        => '1.0.0',                    // Your Application Version
        'env'            => 'production'                // The Applications Environment (e.g. production or development)
    )
);

And finally set the Exception Handler:

set_exception_handler(array('\ExceptionHandler', 'handleException'));

You will start to get Messages like these in your Channel:

chrisbookair.local/2.0.81@development: uncaught Exception in file /Users/christian/Code/PhpstormProjects/api-v2/app/Classes/Util/GeneralUtility.php on line 581 (Code: 8 - Trace: handleException.1395606690.trace.532f44a20d0cc.txt): Memcache::connect(): Server 127.0.0.1 (tcp 11211) failed with: Connection refused (61)

ExceptionHandler will quit your current Applications run and returns a json_encode()d Message

{
  "status": 500,
  "message": "Okay, Houston, we've had a problem here. -- Don't panic. The Team has been notified."
}

other Usage

By default this ExceptionHandler will care about uncaught Exceptions. If you want to send Slack Messages for Exceptions you handled you can use this like \ExceptionHandler::handleException($exception, true); to get notified. ExceptionHandler will not die() in this case.

You can even use ExdeptionHandler to just send Notifications. This feels a little weired however: \ExceptionHandler::handleException(new \Exception('I\'m some text to send to Slack.'), true);