如何在React Native模拟器中写入Apple统一日志?
在React Native中写入Apple统一日志的实现方法
纯JavaScript层无法直接调用Apple的os_log接口,必须通过React Native原生桥接来实现和Swift中os_log一致的效果,具体步骤如下:
一、iOS原生端实现日志桥接模块
- 在你的RN项目的
ios目录下,新建一个Swift文件(比如OSLogBridge.swift),内容如下:
import os.log import React @objc(OSLogBridge) class OSLogBridge: NSObject { // 定义日志类别,方便在Console.app中过滤 private let log = OSLog(subsystem: "com.your-app-bundle-id", category: "RN-OSLog") @objc func logDebug(_ message: String) { os_log("%@", log: log, type: .debug, message) } @objc func logInfo(_ message: String) { os_log("%@", log: log, type: .info, message) } @objc func logError(_ message: String) { os_log("%@", log: log, type: .error, message) } // 必须实现这个方法,RN才能识别模块 @objc static func requiresMainQueueSetup() -> Bool { return true } }
- 修改
ios/[YourAppName]/AppDelegate文件注册模块:- 若是Objective-C版本,在
didFinishLaunchingWithOptions方法里添加:
#import <React/RCTBridge.h> #import <React/RCTBridgeModule.h> RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; [bridge.moduleClasses addObject:[OSLogBridge class]];- 若是Swift版本,在
application(_:didFinishLaunchingWithOptions:)里添加:
let bridge = RCTBridge(delegate: self, launchOptions: launchOptions) bridge.moduleClasses.append(OSLogBridge.self) - 若是Objective-C版本,在
二、JavaScript层封装调用函数
在RN项目的JS代码中,创建一个工具文件(比如osLog.js),封装原生模块的调用:
import { NativeModules } from 'react-native'; const { OSLogBridge } = NativeModules; export const osLog = { debug: (message) => OSLogBridge.logDebug(String(message)), info: (message) => OSLogBridge.logInfo(String(message)), error: (message) => OSLogBridge.logError(String(message)), };
之后在需要日志的地方直接调用:
import { osLog } from './osLog'; // 示例调用 osLog.debug('调试信息:用户点击了按钮'); osLog.info('普通信息:接口请求完成'); osLog.error('错误信息:接口请求失败');
三、在Console.app中查看日志
- 打开Mac上的Console.app
- 在左侧导航栏选择对应的iPhone模拟器或物理设备
- 在搜索框输入你定义的日志类别(比如
RN-OSLog)或者子系统ID,就能过滤出RN代码写入的日志
内容的提问来源于stack exchange,提问作者Marin Todorov
相关产品推荐
相关产品推荐

