stk2k/stream-logger

View on GitHub
README.md

Summary

Maintainability
Test Coverage
PSR-3 logger compliant stream logger
=======================

[![Latest Version on Packagist](https://img.shields.io/packagist/v/stk2k/stream-logger.svg?style=flat-square)](https://packagist.org/packages/stk2k/stream-logger)
[![Software License](https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square)](LICENSE.md)
[![Build Status](https://travis-ci.org/stk2k/stream-logger.svg?branch=master)](https://travis-ci.org/stk2k/stream-logger)
[![Coverage Status](https://coveralls.io/repos/github/stk2k/stream-logger/badge.svg?branch=master)](https://coveralls.io/github/stk2k/stream-logger?branch=master)
[![Code Climate](https://codeclimate.com/github/stk2k/stream-logger/badges/gpa.svg)](https://codeclimate.com/github/stk2k/stream-logger)
[![Total Downloads](https://img.shields.io/packagist/dt/stk2k/stream-logger.svg?style=flat-square)](https://packagist.org/packages/stk2k/stream-logger)

## Description

PSR-3 logger compliant stream logger

## Feature

- [PSR/Log](https://github.com/php-fig/log) compliant.
- PHP output streams
    - php://stdout
    - php://stderr
    - php://output
    - php://memory
    - php://temp
- Default formatter
- Custom format with default formatter
- Custom formatter class
- toArray()/each() method to get all log messages(only for MemoryLogger).
- filter methods for buffered stream loggers.

## Usage

### Default format

```php
use Stk2k\MemoryLogger\SimpleMemoryLogger;

$logger = new SimpleMemoryLogger();
$logger->debug('Hello, world!');
$logger->warning('Something is wrong...');

print_r($logger->toArray());
// Array
// (
//     [0] => 2019-10-11 20:42:10 [debug] Hello, world! []      @...\example1.php(7)
//     [1] => 2019-10-11 20:42:10 [warning] Something is wrong... []      @...\example1.php(8)
// )
```

### Custom format with default formatter

```php
use Stk2k\MemoryLogger\SimpleMemoryLogger;
use Stk2k\MemoryLogger\Formatter\DefaultFormatter;

$logger = new SimpleMemoryLogger(new DefaultFormatter('%LEVEL%:%MESSAGE%'));
$logger->debug('Hello, world!');
$logger->warning('Something is wrong...');

print_r($logger->toArray());
// Array
// (
//     [0] => debug:Hello, world!
//     [1] => warning:Something is wrong...
// )
```

### Custom formatter class

You can also define your own formatter by implementing LogFormatterInterface.

```php
use Stk2k\MemoryLogger\SimpleMemoryLogger;
use Stk2k\MemoryLogger\LogFormatterInterface;

class JsonFormatter implements LogFormatterInterface
{
    public function format($level, $message, array $context, string $file, int $line): string
    {
        return json_encode([
            'level' => $level, 'message' => $message, 'context' => $context, 'file' => $file, 'line' => $line,
        ]);
    }
}

$logger = new SimpleMemoryLogger(new JsonFormatter);
$logger->debug('Hello, world!');
$logger->warning('Something is wrong...');

print_r($logger->toArray());
// Array
// (
//    [0] => {"level":"debug","message":"Hello, world!","context":[],"file":".../example3.php","line":18}
//    [1] => {"level":"warning","message":"Something is wrong...","context":[],"file":".../example3.php","line":19}
// )
```

### Retrieving each lines

```php
use Stk2k\MemoryLogger\SimpleMemoryLogger;

$logger = new SimpleMemoryLogger();
$logger->debug('Hello, world!');
$logger->warning('Something is wrong...');

$logger->each(function($line){
    echo $line . PHP_EOL;
});
// 2019-10-11 20:58:33 [debug] Hello, world! []      @.../example4.php(7)
// 2019-10-11 20:58:33 [warning] Something is wrong... []      @.../example4.php(8)
```

### Filtering by log level

```php
use Stk2k\StreamLogger\BufferedOutputLogger;
use Psr\Log\LogLevel;

$logger = new BufferedOutputLogger();

$logger->debug('debug');
$logger->warning('warning');
$logger->error('error');
$logger->notice('notice');
$logger->info('info');
$logger->critical('critical');

$logger->filterByLevelBetween(LogLevel::WARNING, LogLevel::ERROR)->flush();
// 2019-10-12 10:46:29 [warning] warning []      @.../xample6.php(10)
// 2019-10-12 10:46:29 [error] error []      @.../example6.php(11)
```

### Filtering by callback

```php
use Psr\Log\LogLevel;
use Stk2k\StreamLogger\BufferedOutputLogger;
use Stk2k\StreamLogger\LogMessage;

$logger = new BufferedOutputLogger();

$logger->debug('debug');
$logger->warning('warning');
$logger->error('error');
$logger->notice('notice');
$logger->info('info');
$logger->critical('critical');

$logger->filter(function(LogMessage $m){
    return $m->getLevel() === LogLevel::INFO || $m->getLevel() === LogLevel::WARNING;
})->flush();
// 2019-10-12 14:09:04 [warning] warning []      @.../example11.php(11)
// 2019-10-12 14:09:04 [info] info []      @.../example11.php(14)
```


## Requirement

PHP 7.0 or later

## Installing stk2k/stream-logger

The recommended way to install stk2k/stream-logger is through
[Composer](http://getcomposer.org).

```bash
composer require stk2k/stream-logger
```

After installing, you need to require Composer's autoloader:

```php
require 'vendor/autoload.php';
```

## License
This library is licensed under the MIT license.

## Author

[stk2k](https://github.com/stk2k)

## Disclaimer

This software is no warranty.

We are not responsible for any results caused by the use of this software.

Please use the responsibility of the your self.