Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
PHP 5.3+ micro logging package that is highly extendable via closures.
PHP

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
examples
lib
tests
.gitignore
.travis.yml
LICENSE
README.md
composer.json
phpunit.xml.dist

README.md

Analog - PHP 5.3+ micro logging package Build Status

Click here to lend your support to: Analog and make a donation at www.pledgie.com !

A MicroPHP logging package based on the idea of using closures for configurability and extensibility. It functions as a static class, but you can completely control the writing of log messages through a closure function (aka anonymous functions), or use the Analog\Logger wrapper that implements the PSR-3 specification.

By default, this class will write to a file named sys_get_temp_dir() . '/analog.txt' using the format "machine - date - level - message\n", making it usable with no customization necessary.

Analog also comes with over a dozen pre-written handlers in the Analog/Handlers folder, with examples for each in the examples folder. These include:

  • Amon - Send logs to the Amon server monitoring tool
  • Buffer - Buffer messages to send all at once (works with File, Mail, Stderr, and Variable handlers)
  • File - Append messages to a file
  • FirePHP - Send messages to FirePHP browser plugin
  • GELF - Send message to the Graylog2 log management server
  • LevelBuffer - Buffer messages and send only if sufficient error level reached
  • Mail - Send email notices
  • Mongo - Save to MongoDB collection
  • Multi - Send different log levels to different handlers
  • Null - Do nothing
  • Post - Send messages over HTTP POST to another machine
  • Stderr - Send messages to STDERR
  • Syslog - Send messages to syslog
  • Threshold - Only writes log messages above a certain threshold
  • Variable - Buffer messages to a variable reference.

So while it's a micro class, it's highly extensible and very capable out of the box too.

Rationale

I wrote this because I wanted something very small and simple like KLogger, and preferably not torn out of a wider framework if possible. After searching, I wasn't happy with the single-purpose libraries I found. With KLogger for example, I didn't want an object instance but rather a static class, and I wanted more flexibility in the back-end.

I also found some that had the flexibility also had more complexity, for example Monolog is 25 source files (not incl. tests). With closures, this seemed to be a good balance of small without sacrificing flexibility.

What about Analog, the logfile analyzer? Well, since it hasn't been updated since 2004, I think it's safe to call a single-file PHP logging class the same thing without it being considered stepping on toes :)

Usage

Basic usage, with a custom handler function:

<?php

require_once 'Analog.php';

// Default logging to /tmp/analog.txt
Analog::log ('Log this error');

// Log to a MongoDB log collection
Analog::handler (function ($info) {
    static $conn = null;
    if (! $conn) {
        $conn = new Mongo ('localhost:27017');
    }
    $conn->mydb->log->insert ($info);
});

// Log an alert
Analog::log ('The sky is falling!', Analog::ALERT);

// Log some debug info
Analog::log ('Debugging info', Analog::DEBUG);

?>

Usage with PSR-0, Composer, and the FirePHP handler:

1. Create a composer.json file in the root of your project with the following contents.

{
    "require": {
        "analog/analog": "dev-master"
    }
}

2. Run php composer.phar install from the terminal in the root of your project.

3. Include Composer's autoloader and use the Analog\Analog class.

<?php

require_once 'vendor/autoload.php';

use Analog\Analog;

Analog::log ('Log this error');

Analog::handler (\Analog\Handler\FirePHP::init ());

Analog::log ('Take me to your browser');

?>

Usage with PSR-3, Composer, and the Variable handler:

1. Create a composer.json file in the root of your project with the following contents.

{
    "require": {
        "analog/analog": "dev-master"
    }
}

2. Run php composer.phar install from the terminal in the root of your project.

3. Include Composer's autoloader and use the Analog\Logger class.

<?php

require_once 'vendor/autoload.php';

$logger = new Analog\Logger;

$log = '';

$logger->handler (Analog\Handler\Variable::init ($log));

$logger->alert ('Things are really happening right now!');

var_dump ($log);

?>

For more examples, see the examples folder.

Something went wrong with that request. Please try again.