---
title: logger - SDM 日志打印拦截器，支持 init、request、response 链路日志输出
summary: logger 是 @ray-js/panel-sdk 提供的内置 SDM 拦截器，功能类似 redux-logger，可配置在 init（initDpState、initDevInfo）、request（publishDps）和 response（onDpDataChange、onDeviceOnlineStatusUpdate、onDeviceInfoUpdated、onNetworkStatusChange、onBluetoothAdapterStateChange）链路上，自动在 console 打印初始化、下发与设备事件日志信息，便于调试。类型为 Interceptor<any, any, any>，直接从 @ray-js/panel-sdk 引入 logger 即可使用。
questions:
  - logger 拦截器如何从 @ray-js/panel-sdk 引入并配置到 SmartDeviceModel 的 interceptors 中？
  - logger 可以配置在哪些 init、request 和 response 链路上（initDpState、publishDps、onDpDataChange 等）？
  - logger 的日志输出格式类似 redux-logger，在控制台中会显示哪些信息？
  - logger 的类型定义 Interceptor<any, any, any> 的三个泛型参数分别代表什么？
  - 如何将 logger 同时配置在 publishDps 请求和多个 response 事件上实现全链路日志？
  - logger 与 dp-kit、matter-kit 等其他拦截器是否可以同时使用，配置顺序有什么要求？
  - onDeviceOnlineStatusUpdate 和 onNetworkStatusChange 事件通过 logger 打印的日志内容有什么区别？
  - 在生产环境中是否需要移除 logger 拦截器以减少 console 输出？
  - logger 配置在 onBluetoothAdapterStateChange 上时能打印哪些蓝牙状态变化信息？
  - 如何仅在开发环境通过条件判断决定是否将 logger 加入 interceptors 配置？
---

# logger

日志 console 打印拦截器，类似 redux-logger。

<Image src="/images/panel/sdm-interceptor-logger.jpg" />

## 接入指南

logger 可用于打印 SDM 的初始化、下发和事件回调链路日志。若手动覆盖某条拦截器数组，需要将 `logger` 显式放回对应链路。

### 根据业务场景接入 logger

> src/devices/index.ts

```ts | pure
import { SmartDeviceModel, logger } from '@ray-js/panel-sdk';
import { defaultSchema } from '@/devices/schema';

type SmartDeviceSchema = typeof defaultSchema;

const options = {
  interceptors: {
    init: {
      initDpState: [logger],
      initDevInfo: [logger],
    },
    request: {
      publishDps: [logger],
    },
    response: {
      onDpDataChange: [logger],
      onDeviceOnlineStatusUpdate: [logger],
      onDeviceInfoUpdated: [logger],
      onNetworkStatusChange: [logger],
      onBluetoothAdapterStateChange: [logger],
    },
  },
};

export const devices = {
  common: new SmartDeviceModel<SmartDeviceSchema>(options),
};
```

## 支持的链路

| 分类 | 可配置项 |
| ----- | ----- |
| `init` | `initDpState`、`initDevInfo` |
| `request` | `publishDps` |
| `response` | `onDpDataChange`、`onDeviceOnlineStatusUpdate`、`onDeviceInfoUpdated`、`onNetworkStatusChange`、`onBluetoothAdapterStateChange` |

## API

```ts | pure
export declare const logger: Interceptor<any, any, any>;
```
