---
title: Customize the JavaScript SDK v6+ logger
slug: feature-experimentation/docs/customize-the-javascript-sdk-logger
docTags: 
createdAt: 2026-08-05T20:39:53.000Z
---

/logg

## Minimum SDK version

v6.0.0+

For versions 5.3.5 and below, see [JavaScript (Browser) SDK](docId\:I1IJycfzNf1ibfpeDzAN7) or [JavaScript (Node) SDK](docId\:AvdZUN4jGJ_xBdNF70N3l). See the [SDK compatibility matrix](docId:2shbZfPCkPAZ0mlZpL1TU) documentation for a list of current SDK releases and the features they support.

## Description

To enable logging for the JavaScript SDK, create a logger using the `createLogger` factory function and pass the logger to `createInstance`.

```javascript
import {
  createInstance,
  createPollingProjectConfigManager,
  createLogger,
  LogLevel,
  INFO
} from "@optimizely/optimizely-sdk";

const SDK_KEY = "YOUR_SDK_KEY";

const pollingConfigManager = createPollingProjectConfigManager({
  sdkKey: SDK_KEY,
});

const customLogHandler = {
  log: (level, message) => {
    switch (level) {
      case LogLevel.Info:
        // INFO log message
        console.info(message);
        break;
      
      case LogLevel.Debug:
        // DEBUG log message
        console.debug(message);
        break;

      case LogLevel.Warn:
        // WARNING log message
        console.warn(message);
        break;

      case LogLevel.Error:
        // ERROR log message
        console.error(message);
        break;
    }
  }
}

const logger = createLogger({
  level: INFO,
});

const loggerWithCustomHandler = createLogger({
  level: INFO,
  logHandler: customLogHandler,  
})

const optimizely = createInstance({
  projectConfigManager: pollingConfigManager,
  logger
});
```

To customize the `logger` instance, you could use following configuration:

| Parameter                    | Type              | Description                                                                                                                                                                                                                                                                       |
| ---------------------------- | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| \`level\`                    | OpaqueLevelPreset | Level preset that can be used directly to create logger instance. Level presets can be imported from the package root.                                                                                                                                                            |
| \`logHandler\`\ \*optional\* | LogHandler        | An interface that implements the log method. A custom \`LogHandler\` can be used to modify how log messages are handled (for example, storing in a file or sending to an external system). By default, a console log handler is used which prints the log message to the console. |

## Log level presets

The following table lists the log level presets for the JavaScript SDK v6+.

| Log Level | Explanation                                                                                                                                                                                                         |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **ERROR** | Logs events that prevent feature flags from functioning correctly, such as an invalid datafile during initialization or incorrect feature keys. These issues require user intervention to fix.                      |
| **WARN**  | Logs events that do not prevent feature flags from functioning correctly but may lead to unexpected outcomes, like future API deprecation, improper logger or error handler settings, and null values from getters. |
| **INFO**  | Logs significant events, such as when a decision or tracking starts and succeeds, to illustrate the lifecycle of an API call.                                                                                       |
| **DEBUG** | Logs additional information related to errors that assist Optimizely in debugging, like when a feature flag is not running or a user is not included in a rollout.                                                  |

They can be imported with the following code sample:

```javascript
import {
	DEBUG,
  INFO,
  WARN,
  ERROR
} from "@optimizely/optimizely-sdk";
```
