johnykvsky / jklogger
A Simple Logging Class
Requires
- php: ^7.4 || ^8.0
- psr/log: ^1.0.0
Requires (Dev)
- johnykvsky/faker: ~1.14
- phpstan/extension-installer: ~1.1.0
- phpstan/phpstan: ~0.12.92
- phpunit/phpunit: ~8.5.2
- thecodingmachine/phpstan-strict-rules: ~0.12.1
This package is auto-updated.
Last update: 2024-10-15 22:45:40 UTC
README
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.