> For the complete documentation index, see [llms.txt](https://marblejs.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://marblejs.gitbook.io/docs/other/api-reference/middleware-logger.md).

# @marblejs/middleware-logger

**Simple** middleware for request logging inside your console. It displays the outgoing request events using the following format:

```
{HTTP_METHOD} {PATH} {HTTP_STATUS} {TIME}
```

```
POST /api/v1/user 200 1ms
```

### Installation

```bash
$ yarn add @marblejs/middleware-logger
```

Requires `@marblejs/core` to be installed.

### Importing

```typescript
import { logger$ } from '@marblejs/middleware-logger';
```

### Type declaration

```
logger$ :: LoggerOptions -> HttpMiddlewareEffect
```

### **Parameters**

| *parameter* | definition                  |
| ----------- | --------------------------- |
| *options*   | \<optional> `LoggerOptions` |

#### ***LoggerOptions***

| *parameter* | definition                           |
| ----------- | ------------------------------------ |
| *silent*    | \<optional> `boolean`                |
| *filter*    | \<optional> `HttpRequest -> boolean` |

### Usage

1. Default behavior. Log every response to *process*.*stdout*:

```typescript
import { httpListener } from '@marblejs/core';
import { logger$ } from '@marblejs/middleware-logger';

const middlewares = [
  logger$(),
  ...
];

export const listener = httpListener({
  middlewares,
  effects: [],
});
```

2. Customized logging behavior:

```typescript
import { httpListener } from '@marblejs/core';
import { logger$ } from '@marblejs/middleware-logger';
import { isTestEnv } from './util';

const middlewares = [
  logger$({
    silent: isTestEnv(),
    filter: req => req.response.statusCode >= 400;
  }),
  ...
];

export const listener = httpListener({
  middlewares,
  effects: [],
});
```

* **silent** - When `true` the logging is turned off (usually useful during testing),
* **filter** - Filter outgoing responses or incoming requests based on given predicate. For example we can log only HTTP status codes above *400*.
