Comments (2)
Hi Mike!
You can try something like this:
Require monolog:
composer require monolog/monolog
Then create a new file: src/App/Logger.php
<?php
declare(strict_types=1);
$container['logger'] = static function (): Monolog\Logger {
$path = __DIR__ . '/../Logs/MyApi.log';
$level = \Monolog\Logger::DEBUG;
$logger = new Monolog\Logger('my-slim4-api');
$logger->pushProcessor(new Monolog\Processor\UidProcessor());
$logger->pushHandler(new Monolog\Handler\StreamHandler($path, $level));
return $logger;
};
Then include this new file in the src/App/App.php
<?php
declare(strict_types=1);
require __DIR__ . '/../../vendor/autoload.php';
require __DIR__ . '/DotEnv.php';
$app = require __DIR__ . '/Container.php';
$customErrorHandler = require __DIR__ . '/ErrorHandler.php';
(require __DIR__ . '/Middlewares.php')($app, $customErrorHandler);
(require __DIR__ . '/Cors.php')($app);
(require __DIR__ . '/Database.php');
(require __DIR__ . '/Logger.php'); // <--- Monolog.
(require __DIR__ . '/Services.php');
(require __DIR__ . '/Repositories.php');
(require __DIR__ . '/Routes.php');
(require __DIR__ . '/NotFound.php')($app);
return $app;
And then you are ready to use the logger, for example:
public function getHelp(Request $request, Response $response): Response
{
$this->container->get('logger')->info('Hello Log!!!'); // <--- Logging With Monolog.
$message = [
'api' => self::API_NAME,
'version' => self::API_VERSION,
'timestamp' => time(),
];
return JsonResponse::withJson($response, (string) json_encode($message));
}
Also in the Error Handler Like this:
<?php
declare(strict_types=1);
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface;
return function (
ServerRequestInterface $request,
Throwable $exception,
bool $displayErrorDetails,
bool $logErrors,
bool $logErrorDetails
) use ($app, $container): Response {
$statusCode = 500;
if (is_int($exception->getCode()) &&
$exception->getCode() >= 400 &&
$exception->getCode() <= 500
) {
$statusCode = $exception->getCode();
}
$container['logger']->error('Ups, Logging Error..!'); // <--- Logging With Monolog.
$className = new ReflectionClass(get_class($exception));
$data = [
'message' => $exception->getMessage(),
'class' => $className->getShortName(),
'status' => 'error',
'code' => $statusCode,
];
$body = json_encode($data, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
$response = $app->getResponseFactory()->createResponse();
$response->getBody()->write($body);
return $response
->withStatus($statusCode)
->withHeader('Content-type', 'application/problem+json');
};
from slim4-api-skeleton.
Hi @mike347 ! I'm going to close this issue. If you need any help just let me know. Thanks!
from slim4-api-skeleton.
Related Issues (17)
- Integrate Phinx or other migration database system HOT 2
- slim4-api-skeleton as docker container without mysql in container HOT 2
- composer test not working HOT 6
- Missing middleware skeleton HOT 2
- docker-compose without mysql HOT 1
- How to handle with exceptions? HOT 2
- composer test no arranca, Tests: 4/4 HOT 2
- About running the docker compose HOT 2
- Slim 4 api with sentry HOT 8
- Issue in tests HOT 1
- Role based authorization HOT 8
- Add an option for setBasePath HOT 1
- Abandoned Packages Updated HOT 1
- Undefined property: stdClass:: HOT 4
- automatic generation of a Swagger / OpenAPI JSON file
- Error , could not find driver HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from slim4-api-skeleton.