blog.yuzu441.com

React Nativeでpinoを使う

React Native(hermes)でpinoを使いつつ、datadogのRUMでログを収集する際の設定メモ

アプリからdatadogへのログ送信

@datadog/mobile-react-nativeDdLogsを利用する

https://docs.datadoghq.com/logs/log_collection/reactnative/

これを使えばdatadogに簡単にログを送信できる

// configはすでに設定済みとする
import { DdLogs } from '@datadog/mobile-react-native'

DdLogs.info('Hello, World!')

またDdLogs.info等のメソッドは第二引数にattributesを取ることができ、これを使うことでログに付加情報を付与できる

DdLogs.info('Hello, World!', { key: 'value' })

pinoの設定

最初はTransportsを使って実現しようと思ったが、react-nativeだとbrowserモード?(呼び方がわからない)で動作しているようで動かなかった

https://getpino.io/#/docs/browser

なのでBrowser APIのWriteを利用する

import pino from 'pino'
const logger = pino({
  browser: {
    write: {
      info: function (o) {
        const { message, ...other } = o
        DdLogs.info(o.message, other)
      },
      error: function (o) {
        const { message, ...other } = o
        DdLogs.error(o.message, other)
      },
    },
  },
})

// or

const logger = pino({
  browser: {
    write: (o) => {
      const { message, ...other } = o

      // levelによって呼び出すものを変える
      DdLogs.info(o.message, other)
    },
  },
})

これでpino経由で出したログがdatadogに送信されるようになる

実際にこれで各種ログをdatadogに送信して、Errorオブジェクトを引数にlogger.error(err)のように呼び出して表示するのもできてるけど、実際に運用してみて良さそうであればどこかのタイミングで実際に使ってるものを公開したい