Logging
Introduction
Logging allows you to provide transparency in your application. If you want to learn more about the processing and details of your application parts, logging is a good way. Supercharge provides a solid logger using the Winston logging library.
Supercharge comes with a built-in logger. The logger is configurable making it seamless for you logging to different destinations, like the console or a log file.
Configuration
All of the logger’s configuration options are inside of the config/logging.ts
configuration file. The config file allows you to customize the default logging driver and channel-specific configuration.
By default, Supercharg uses the console
driver printing all log messages to the terminal. When using the file
driver, you may adjust the log file name. The default log file points to the storage/logs/app.log
file.
Available Log Drivers
Supercharge uses a driver-based approach for logging. A driver represents a single channel or multiple channels. A channel itself describes the destiation for log messages. Here’s a list of available log drivers and the related log channels:
| Channel Driver | Description |
|----------------- |--------------------------------------------- |
| console
| Logging all messages to the terminal |
| file
| Logging all messages to a dedicated log file |
At this point, you can’t configure a “stacked” logger driver that sends log messages to multiple destinations. It’s likely this will be added in future releases.
Using the Logger
Supercharge bootstraps and configures the logger while starting the application. You can access the logger via the application instance or the log facace:
import { Logger } from '@supercharge/facades'
Logger.info('Hello Marcus')
// or
import { App } from '@supercharge/facades'
App.logger().info('Hello Marcus')
Notice: you can access the logger wherever you have the app
instance available. For example, inside of controllers or service providers you may log messages like this:
this.app().logger().info('Hello Marcus')
Available Logger Methods
The logger provides the log methods representing individual log levels. The logger follows the syslog protocol from RFC5424 defining eight log levels:
import { Logger } from '@supercharge/facades'
Logger.emergency(message);
Logger.alert(message);
Logger.critical(message);
Logger.error(message);
Logger.warning(message);
Logger.notice(message);
Logger.info(message);
Logger.debug(message);
Logging Context Data
You can also pass a context data starting from the second argument to the log methods. Typically you’re passing a context object as the second argument containing all your information:
import { Logger } from '@supercharge/facades'
Logger.info(`User successfully logged in`, { userId: user.id })