johnykvsky/jklogger

A Simple Logging Class

0.1.2 2021-07-13 18:48 UTC

This package is auto-updated.

Last update: 2024-10-15 22:45:40 UTC


README

Latest Version on Packagist Software License Total Downloads Build Status

Simple Logging for PHP. Credits goes to Kenny Katzgrau and Dan Horrigan

JKLogger is an easy-to-use PSR-3 compliant logging class for PHP. It isn't naive about file permissions (which is expected). It was meant to be a class that you could quickly include into a project and have working right away.

Install

Via Composer

$ composer require johnykvsky/jklogger

Should work fine on PHP 5.6, but I didn't check that. Just change required PHP version in composer.json and maybe remove dev packages and type hinting.

Usage

<?php

require 'vendor/autoload.php';

$users = [
    [
        'name' => 'Kenny Katzgrau',
        'username' => 'katzgrau',
    ],
    [
        'name' => 'Dan Horrigan',
        'username' => 'dhrrgn',
    ],
];

$logger = new johnykvsky\Utils\JKLogger(__DIR__.'/logs');
$logger->info('Returned a million search results');
$logger->error('Oh dear.');
$logger->debug('Got these users from the Database.', $users);

Output

[2014-03-20 3:35:43.762437] [INFO] Returned a million search results
[2014-03-20 3:35:43.762578] [ERROR] Oh dear.
[2014-03-20 3:35:43.762795] [DEBUG] Got these users from the Database.
    0: array(
        'name' => 'Kenny Katzgrau',
        'username' => 'katzgrau',
    )
    1: array(
        'name' => 'Dan Horrigan',
        'username' => 'dhrrgn',
    )

Setting the Log Level Threshold

You can use the Psr\Log\LogLevel constants to set Log Level Threshold, so that any messages below that level, will not be logged.

Default Level

The default level is DEBUG, which means everything will be logged.

Available Levels

<?php
use Psr\Log\LogLevel;

// These are in order of highest priority to lowest.
LogLevel::EMERGENCY;
LogLevel::ALERT;
LogLevel::CRITICAL;
LogLevel::ERROR;
LogLevel::WARNING;
LogLevel::NOTICE;
LogLevel::INFO;
LogLevel::DEBUG;

Example

<?php
// The 
$logger = new johnykvsky\Utils\JKLogger('/var/log/', Psr\Log\LogLevel::WARNING);
$logger->error('Uh Oh!'); // Will be logged
$logger->info('Something Happened Here'); // Will be NOT logged

Additional Options

JKLogger supports additional options via third parameter in the constructor:

<?php
// Example
$logger = new johnykvsky\Utils\JKLogger('/var/log/', Psr\Log\LogLevel::WARNING, array (
    'extension' => 'log', // changes the log file extension
));

Here's the full list:

Log Formatting

The logFormat option lets you define what each line should look like and can contain parameters representing the date, message, etc.

When a string is provided, it will be parsed for variables wrapped in braces ({ and }) and replace them with the appropriate value:

Tab-separated

Same as default format but separates parts with tabs rather than spaces:

$logFormat = "[{date}]\t[{level}]\t{message}";

Custom variables and static text

Inject custom content into log messages:

$logFormat = "[{date}] [$var] StaticText {message}";

JSON

To output pure JSON, set appendContext to false and provide something like the below as the value of the logFormat option:

$logFormat = json_encode([
    'datetime' => '{date}',
    'logLevel' => '{level}',
    'message'  => '{message}',
    'context'  => '{context}',
]);

The output will look like:

{"datetime":"2015-04-16 10:28:41.186728","logLevel":"INFO","message":"Message content","context":"{"1":"foo","2":"bar"}"}

Pretty Formatting with Level Padding

For the obsessive compulsive

$logFormat = "[{date}] [{level}]{level-padding} {message}";

... or ...

$logFormat = "[{date}] [{level}{level-padding}] {message}";

Testing

$ composer test

Code checking

$ composer phpstan
$ composer phpstan-max

Security

If you discover any security related issues, please email johnykvsky@protonmail.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.