https://github.com/kitloong/laravel-app-logger
Laravel logs for your application
https://github.com/kitloong/laravel-app-logger
access-log laravel logs performance-log query-log
Last synced: 19 days ago
JSON representation
Laravel logs for your application
- Host: GitHub
- URL: https://github.com/kitloong/laravel-app-logger
- Owner: kitloong
- License: mit
- Created: 2020-10-13T15:32:41.000Z (over 4 years ago)
- Default Branch: 1.x
- Last Pushed: 2024-06-27T11:06:04.000Z (11 months ago)
- Last Synced: 2024-11-06T18:55:28.675Z (7 months ago)
- Topics: access-log, laravel, logs, performance-log, query-log
- Language: PHP
- Homepage:
- Size: 41 KB
- Stars: 9
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Laravel Application Logger

[](https://packagist.org/packages/kitloong/laravel-app-logger)
[](https://packagist.org/packages/kitloong/laravel-app-logger)This package provides middleware that generates **HTTP request** and **performance** logs from incoming requests.
This package also provides a Database **query log** to log all executed queries in your application.
## Installation
```bash
composer require kitloong/laravel-app-logger
```## Usage
To start using **HTTP request** and **performance** logger please add the package's middleware in your `app/Http/Kernel.php` or routes.
```
\KitLoong\AppLogger\Middlewares\AppLogger::class
```No code modification needed to use the Database **query log**, you only need to enable it through `.env`.
By default, **HTTP request** and **performance** are enabled while the **query log** is disabled.
However, you could change each setting respectively to a different environment.
```dotenv
# By defaultRUN_HTTP_LOG=true
RUN_PERFORMANCE_LOG=true
RUN_QUERY_LOG=false
```## Log format
### Http request log
```log
[2021-01-10 23:35:27] local.INFO: 2725ffb10adeae3f POST /path - Body: {"test":true} - Headers: {"cookie":["Phpstorm-12345"],"accept-language":["en-GB"]} - Files: uploaded.txt
```### Performance log
```log
[2021-01-10 23:35:27] local.INFO: 2725ffb10adeae3f POST /path 201 - Time: 55.82 ms - Memory: 22.12 MiB
```### Query log
```log
[2021-01-10 23:35:27] local.INFO: Took: 2.45 ms mysql Sql: select * from `users` where `id` = 1
```## What's more
This package uses https://github.com/spatie/laravel-http-logger as the base for the **HTTP request** log, as well as the code design pattern.
It is common to receive tons of incoming requests in a real-life production application.
To ease for analysis, a unique string is embedded into **HTTP request** and **performance** log to indicate both log entries are related.
```log
# HTTP request, unique: 2725ffb10adeae3f
[2021-01-10 23:35:25] local.INFO: 2725ffb10adeae3f GET /path - Body ...# Performance, unique: 2725ffb10adeae3f
[2021-01-10 23:35:27] local.INFO: 2725ffb10adeae3f GET /path 200 - Time: 55.82 ms - Memory: 5.12 MiB
```If you found any high memory usage or slow requests you could easily grep request log by the unique string for more information.
## Configuration
You could also publish the config file to change more configuration or even use your own implementation:
```bash
php artisan vendor:publish --provider="KitLoong\AppLogger\AppLoggerServiceProvider" --tag=config
```You could check the content of the config file [here](config/app-logger.php).
### Config: Logging channel
By default, Laravel App Logger writes logs into your default logging channel.
However, you may implement a new logging channel in Laravel `config/logging.php`, and overwrite the `channel` in the published config file.
An example is written for a better explanation.
In Laravel `config/logging.php`:
```bash
'channels' => [
'request' => [
'driver' => 'daily',
'path' => storage_path('logs/request.log'),
'level' => 'debug',
'days' => 14,
],
'performance' => [
'driver' => 'daily',
'path' => storage_path('logs/performance.log'),
'level' => 'debug',
'days' => 14,
],
'query' => [
'driver' => 'daily',
'path' => storage_path('logs/query.log'),
'level' => 'debug',
'days' => 14,
],
]
```In `config/app-logger.php`:
```bash
'http' => [
...
'channel' => 'request'
],
'performance' => [
...
'channel' => 'performance'
],
'query' => [
...
'channel' => 'query'
]
```### Config: Implement own logger
You could even write your own logger implementation and overwrite it in the config file.
Here is the code snippet of **HTTP request**:
```bash
/*
* The log profile which determines whether a request should be logged.
* It should implement `HttpLogProfile`.
*/
'log_profile' => \KitLoong\AppLogger\HttpLog\LogProfile::class,/*
* The log writer used to write the request to a log.
* It should implement `HttpLogWriter`.
*/
'log_writer' => \KitLoong\AppLogger\HttpLog\LogWriter::class,
```You could find a similar configuration in the `performance` and `query` section.
When you write your own `log_profile`, you must implement each loggers' own `LogProfile` interface.
|Logger|Interface|
|---|---|
|http|`\KitLoong\AppLogger\HttpLog\HttpLogProfile`|
|performance|`\KitLoong\AppLogger\PerformanceLog\PerformanceLogProfile`|
|query|`\KitLoong\AppLogger\QueryLog\QueryLogProfile`|The interface requires `shouldLog` implementation. This is where you place your log condition.
When you write your own `log_writer`, you must implement each loggers' own `LogWriter` interface.
|Logger|Interface|
|---|---|
|http|`\KitLoong\AppLogger\HttpLog\HttpLogWriter`|
|performance|`\KitLoong\AppLogger\PerformanceLog\PerformanceLogWriter`|
|query|`\KitLoong\AppLogger\QueryLog\QueryLogWriter`|The interface requires `log` implementation. This is where you define your log body message.
# License
The Laravel Application Logger is open-sourced software licensed under the [MIT license](LICENSE)