React Nativeでpinoを使う
React Native(hermes)でpinoを使いつつ、datadogのRUMでログを収集する際の設定メモ
アプリからdatadogへのログ送信
@datadog/mobile-react-native
のDdLogs
を利用する
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)
のように呼び出して表示するのもできてるけど、実際に運用してみて良さそうであればどこかのタイミングで実際に使ってるものを公開したい