export const metadata = { title: `${pageNumber} Logging`, } # {metadata.title} In this chapter, you’ll learn how to use Medusa’s logging utility. ## Logger Class Medusa provides a `Logger` class with advanced logging functionalities. This includes configuring logging levels or saving logs to a file. The Medusa application registers the `Logger` class in the Medusa container and each module's container as `logger`. --- ## How to Log a Message Resolve the `logger` using the Medusa container to log a message in your resource. For example, create the file `src/jobs/log-message.ts` with the following content: export const highlights = [ ["7", "resolve", "Resolve the `Logger` class."], ["9", "info", "Log a message of level `info`."] ] ```ts title="src/jobs/log-message.ts" highlights={highlights} import { MedusaContainer } from "@medusajs/framework/types" import { ContainerRegistrationKeys } from "@medusajs/framework/utils" export default async function myCustomJob( container: MedusaContainer ) { const logger = container.resolve(ContainerRegistrationKeys.LOGGER) logger.info("I'm using the logger!") } export const config = { name: "test-logger", // execute every minute schedule: "* * * * *", } ``` This creates a scheduled job that resolves the `logger` from the Medusa container and uses it to log a message. ### Test the Scheduled Job To test out the above scheduled job, start the Medusa application: ```bash npm2yarn npm run dev ``` After a minute, you'll see the following message as part of the logged messages: ```text info: I'm using the logger! ``` --- ## Log Levels The `Logger` class has the following methods: - `info`: The message is logged with level `info`. - `warn`: The message is logged with level `warn`. - `error`: The message is logged with level `error`. - `debug`: The message is logged with level `debug`. Each of these methods accepts a string parameter to log in the terminal with the associated level. --- ## Logging Configurations ### Log Level The available log levels, from lowest to highest levels, are: 1. `silly` (default, meaning messages of all levels are logged) 2. `debug` 3. `info` 4. `warn` 5. `error` You can change that by setting the `LOG_LEVEL` environment variable to the minimum level you want to be logged. For example: ```bash LOG_LEVEL=error ``` This logs `error` messages only. The environment variable must be set as a system environment variable and not in `.env`. ### Save Logs in a File Aside from showing the logs in the terminal, you can save the logs in a file by setting the `LOG_FILE` environment variable to the path of the file relative to the Medusa server’s root directory. For example: ```bash LOG_FILE=all.log ``` Your logs are now saved in the `all.log` file at the root of your Medusa application. The environment variable must be set as a system environment variable and not in `.env`. --- ## Show Log with Progress The `Logger` class has an `activity` method used to log a message of level `info`. If the Medusa application is running in a development environment, a spinner starts to show the activity's progress. For example: ```ts title="src/jobs/log-message.ts" import { MedusaContainer } from "@medusajs/framework/types" import { ContainerRegistrationKeys } from "@medusajs/framework/utils" export default async function myCustomJob( container: MedusaContainer ) { const logger = container.resolve(ContainerRegistrationKeys.LOGGER) const activityId = logger.activity("First log message") logger.progress(activityId, `Second log message`) logger.success(activityId, "Last log message") } ``` The `activity` method returns the ID of the started activity. This ID can then be passed to one of the following methods of the `Logger` class: - `progress`: Log a message of level `info` that indicates progress within that same activity. - `success`: Log a message of level `info` that indicates that the activity has succeeded. This also ends the associated activity. - `failure`: Log a message of level `error` that indicates that the activity has failed. This also ends the associated activity. If you configured the `LOG_LEVEL` environment variable to a level higher than those associated with the above methods, their messages won’t be logged.