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.
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.
<?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);
[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',
)
You can use the Psr\Log\LogLevel
constants to set Log Level Threshold, so that any messages below that level, will not be logged.
The default level is DEBUG
, which means everything will be logged.
<?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;
<?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
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:
Option | Default | Description |
---|---|---|
dateFormat | 'Y-m-d G:i:s.u' | The format of the date in the start of the log lone (php formatted) |
extension | 'txt' | The log file extension |
filename | [prefix][date].[extension] | Set the filename for the log file. This overrides the prefix and extention options. |
flushFrequency | false (disabled) |
How many lines to flush the output buffer after |
prefix | 'log_' | The log file prefix |
logFormat | false |
Format of log entries |
appendContext | true |
When false , don't append context to log entries |
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:
Parameter | Description |
---|---|
date | Current date (uses dateFormat option) |
level | The PSR log level |
level-padding | The whitespace needed to make this log level line up visually with other log levels in the log file |
priority | Integer value for log level (see $logLevels ) |
message | The message being logged |
context | JSON-encoded context |
Same as default format but separates parts with tabs rather than spaces:
$logFormat = "[{date}]\t[{level}]\t{message}";
Inject custom content into log messages:
$logFormat = "[{date}] [$var] StaticText {message}";
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"}"}
For the obsessive compulsive
$logFormat = "[{date}] [{level}]{level-padding} {message}";
... or ...
$logFormat = "[{date}] [{level}{level-padding}] {message}";
$ composer test
$ composer phpstan
$ composer phpstan-max
If you discover any security related issues, please email johnykvsky@protonmail.com instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.