# Logger API: custom log files and levels

*B2C Commerce Developer Study Guide · Application Development · Last updated November 3, 2026 · https://www.certifyforce.com/study-guide/b2c-commerce-developer/application-development/logger-api-custom-log-files-and-levels*

How to write script logging with dw.system.Logger and Log: category loggers versus custom named files, static methods versus logger instances, MessageFormat arguments, enabled-level guards, which level reaches a file, redundancy suppression and keeping sensitive data out of logs.

- Certification: Salesforce B2C Commerce Developer
- Exam section: Application Development
- Study guide: https://www.certifyforce.com/study-guide/b2c-commerce-developer

**Official exam objective:**

> Given a logging task and existing configuration, write code that logs non-sensitive data to custom log files with different log levels.

## What the exam expects

- Obtain a logger for a category or for a custom named log file, and predict which file the messages land in when several scripts use the same prefix.
- Choose between the static `Logger` methods and a `Log` instance, including for fatal messages.
- Write messages with MessageFormat placeholders and guard expensive debug output with the instance's enabled check.
- Pick the log level that reaches a file given the existing Custom Log Settings and notification requirements.
- Explain gaps caused by redundancy suppression, read the custom error log for controller exceptions, and keep sensitive data out of logs, including service communication logs.

Key terms: **category** (the name a logger is configured by in Custom Log Settings); **file name prefix** (the first `getLogger` argument that creates a custom named log file); **`Log`** (the log4j-like logger instance the getters return); **MessageFormat** (the Java `{0}` placeholder syntax the logging methods implement); **redundancy tracking** (suppression of error and warn messages repeated too often).

## Key facts

| Fact | Detail | Source |
|---|---|---|
| Same prefix twice | Same log instance, same log file | [Log Files](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-log-files-overview.html) |
| Named file categories | Business Manager custom log categories also apply | [Log Files](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-log-files-overview.html) |
| Prefix length | 3 to 25 characters | [Log Files](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-log-files-overview.html) |
| File name quota | 200 per day per appserver (Web Services page says 40); then `getLogger` throws | [Log Files](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-log-files-overview.html) |
| Static methods | `debug`, `info`, `warn`, `error`; no static `fatal` | [Class Logger](https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-script-api/dw.system.Logger.html) |
| Fatal | Always enabled; optional email | [Class Log](https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-script-api/dw.system.Log.html) |
| Placeholder syntax | Java MessageFormat, `{0}`, `{1}` | [Class Logger](https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-script-api/dw.system.Logger.html) |
| `customwarn` | Always logged to file | [Log Files](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-log-files-overview.html) |
| Debug on production | Always disabled | [Log Files](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-log-files-overview.html) |
| Redundancy | Over 10 in 3 minutes: suppressed 3 minutes | [Log Files](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-log-files-overview.html) |
| Custom error log | Function hierarchy and line numbers, for developers | [SFRA Hooks](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-sfra-hooks.html) |
| Comm log import to production | Not enabled; warning in the import log | [Web Services](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-webservices.html) |

## Check yourself

- What does `Log.getNDC()` return?
- When does a new suppression period start after one has ended?
- Why can't `_renewals` be used as a file name prefix?
- Which three `Logger` methods return a `Log` instance?

## Sources

- [Class Logger](https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-script-api/dw.system.Logger.html)
- [Log Files](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-log-files-overview.html)
- [Class Log](https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-script-api/dw.system.Log.html)
- [SFRA Hooks](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-sfra-hooks.html)
- [Web Services](https://developer.salesforce.com/docs/commerce/b2c-commerce/guide/b2c-webservices.html)

## About the full unit

The "Core concepts", "Exam traps" and "Worked scenario" sections of this unit, its 10 linked practice questions, and unlimited timed mock exams are included with the B2C Commerce Developer pack (USD $19): https://www.certifyforce.com/practice-exams
