Logging

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:

src/jobs/log-message.ts
1import { MedusaContainer } from "@medusajs/framework/types"2import { ContainerRegistrationKeys } from "@medusajs/framework/utils"3
4export default async function myCustomJob(5  container: MedusaContainer6) {7  const logger = container.resolve(ContainerRegistrationKeys.LOGGER)8
9  logger.info("I'm using the logger!")10}11
12export const config = {13  name: "test-logger",14  // execute every minute15  schedule: "* * * * *",16}

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:

npm run dev

After a minute, you'll see the following message as part of the logged messages:

Code
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:

Terminal
LOG_LEVEL=error

This logs error messages only.

ImportantThe 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:

Terminal
LOG_FILE=all.log

Your logs are now saved in the all.log file at the root of your Medusa application.

ImportantThe 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:

src/jobs/log-message.ts
1import { MedusaContainer } from "@medusajs/framework/types"2import { ContainerRegistrationKeys } from "@medusajs/framework/utils"3
4export default async function myCustomJob(5  container: MedusaContainer6) {7  const logger = container.resolve(ContainerRegistrationKeys.LOGGER)8
9  const activityId = logger.activity("First log message")10
11  logger.progress(activityId, `Second log message`)12
13  logger.success(activityId, "Last log message")14}

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.
NoteIf you configured the LOG_LEVEL environment variable to a level higher than those associated with the above methods, their messages won’t be logged.
Was this chapter helpful?
Instrumentation
7. ProductionBuild
Edit this page
Ask Anything
FAQ
What is Medusa?
How can I create a module?
How can I create a data model?
How do I create a workflow?
How can I extend a data model in the Product Module?
Recipes
How do I build a marketplace with Medusa?
How do I build digital products with Medusa?
How do I build subscription-based purchases with Medusa?
What other recipes are available in the Medusa documentation?
Chat is cleared on refresh
Line break