npm package: @richardpickett/logger
Description: A library for console logging
Author: Richard@RichardPickett.com
Latest version: 1.1.5

# logger

## Description

chalk-based logging for your log-reading pleasure

```bash
npm i @richardpickett/logger
```

Example:

```javascript
// your own logger.js
import { Logger, defaultLabels } from "@richardpickett/logger";

// we only want to log these in our app
// ideally you'll use a config and build the flags from your config
// so you can have all the logging in your code and control what gets
// seen through your config file

const logThese = ["LOG", "INFO", "SUCCESS", "ERROR"];

const flags = {};

defaultLabels.forEach((label) => {
  flags[label] = logThese.indexOf(label) > -1;
});

const logger = new Logger({ flags });

export default logger;
```

```javascript
// now in your project files:
import logger from "./logger.js";

logger.info("This is an info mesage");
logger.success("This is what success looks like");
logger.warning("This message should not get displayed");
logger.error("Looks like we have a problem, Houston");
```

## Prefix

You can set a prefix on all your log entries by calling `setPrefix()`:

```javascript
logger.setPrefix(`[ProcessId: ${process.pid}]`);
logger.info("New worker started");
// yields: [2023-11-21T20:01:34Z] [INFO] [ProcessId: 45] New worker started
```

## Additional constructor arguments

The full constructor parameter is a single object, defaulted like this:

```javascript
{
    methods = [
      {
        label: "LOG",
        methodName: "log",
        consoleMethod: "log",
        labelChalk: standardColors.LOG_LABEL,
        textChalk: standardColors.LOG_TEXT,
      },
      {
        label: "DEBUG",
        methodName: "debug",
        consoleMethod: "log",
        labelChalk: standardColors.DEBUG_LABEL,
        textChalk: standardColors.DEBUG_TEXT,
      },
      {
        label: "INFO",
        methodName: "info",
        consoleMethod: "log",
        labelChalk: standardColors.INFO_LABEL,
        textChalk: standardColors.INFO_TEXT,
      },
      {
        label: "TRACE",
        methodName: "trace",
        consoleMethod: "log",
        labelChalk: standardColors.TRACE_LABEL,
        textChalk: standardColors.TRACE_TEXT,
      },
      {
        label: "SUCCESS",
        methodName: "success",
        consoleMethod: "log",
        labelChalk: standardColors.SUCCESS_LABEL,
        textChalk: standardColors.SUCCESS_TEXT,
      },
      {
        label: "WARNING",
        methodName: "warning",
        consoleMethod: "error",
        labelChalk: standardColors.WARNING_LABEL,
        textChalk: standardColors.WARNING_TEXT,
      },
      {
        label: "ERROR",
        methodName: "error",
        consoleMethod: "error",
        labelChalk: standardColors.ERROR_LABEL,
        textChalk: standardColors.ERROR_TEXT,
      },
    ],
    flags = { LOG: true, DEBUG: true, INFO: true, TRACE: true, SUCCESS: true, WARNING: true, ERROR: true },
    prefix = "",
    logDisabled = true,
  }
```

`methods`: these are the formats for all the `logger.<method>()` calls. Create your own, or override these to change the formatting.

`flags`: these turn methods on or off. If a flag is missing, it will default be turned off. Calling a method that is turned off will not result in an error, it's just not logged.

`prefix`: set this prefix to all your logs. This way you can create multiple logger instances and separate their logs from the output using the prefix

`logDisabled`: when the logger is initialized it will log all the disabled log methods. This by default will appear at the top of your log file, self-explaining why certain logs may not be seen.

## Per-Method Date Override

You can override the global `dateEnabled` setting for individual method calls by passing an options object as the first parameter:

```javascript
const logger = new Logger({ dateEnabled: true });

// Uses global dateEnabled setting (true)
logger.info("This message has a timestamp");

// Override to disable timestamp for this specific call
logger.info({ dateEnabled: false }, "This message has no timestamp");

// Override to enable timestamp for this specific call
logger.info({ dateEnabled: true }, "This message has a timestamp");
```

This is particularly useful when you want most of your logs to have timestamps but occasionally need plain text output for specific messages.