7.1. 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 { Logger } from "@medusajs/medusa"2import { MedusaContainer } from "@medusajs/types"3
4export default async function myCustomJob(5  container: MedusaContainer6) {7  const logger: Logger = container.resolve("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:

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

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:

LOG_LEVEL=error

This logs error messages only.

Important

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:

LOG_FILE=all.log

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

Important

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:

src/loaders/log-message.ts
1import { Logger, MedusaContainer } from "@medusajs/medusa"2
3export default async (container: MedusaContainer) => {4  const logger = container.resolve<Logger>("logger")5
6  const activityId = logger.activity("First log message")7
8  logger.progress(activityId, `Second log message`)9
10  logger.success(activityId, "Last log message")11}

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.
Note

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.

Was this chapter helpful?