Table of Contents
- 1. The Production Logging Problem in React Native
- 2. Local Logging vs. Remote Logging
- 3. Setting Up Remote Logging with Logtrics
- 4. Structured Logging: Beyond console.log Strings
- 5. Session & User Correlation
- 6. Filtering & Searching Production Logs
- 7. Performance Considerations
- 8. Logging Best Practices for React Native
- 9. FAQ
1. The Production Logging Problem in React Native
Here's the uncomfortable truth about React Native production debugging: by default, you have zero visibility.
// These lines run in production and produce nothing you can see:
console.log('User tapped checkout');
console.error('Payment API returned 500:', error);
console.warn('Falling back to cached data');
// Output: /dev/null — it's gone forever
When a user reports "the app just froze on the payment screen," you have no logs, no context, no breadcrumbs. You're debugging by guesswork. Remote logging solves this by transmitting log entries from user devices to a cloud server you can query in real-time.
Note: Even React Native's __DEV__ flag doesn't help here — it only controls whether Metro is connected, not whether logs are persisted anywhere useful.
2. Local Logging vs. Remote Logging
| Feature | console.log | Local Logger (winston, pino) | Logtrics Remote Logging |
|---|---|---|---|
| Visible in production | No | No | Yes |
| Search & filter | No | No | Yes |
| User-level filtering | No | No | Yes |
| Long-term retention | No | Device only | 365 days |
| Crash correlation | No | No | Yes |
| Performance impact | Negligible | Low | Low (batched) |
3. Setting Up Remote Logging with Logtrics
After installing the SDK (see the crash reporting setup guide), enable logging in your Logtrics.init() call:
Logtrics.init({
apiKey: 'your-api-key',
appVersion: '2.4.0',
environment: 'production',
logging: {
enabled: true,
minLevel: 'info', // debug | info | warn | error
batchSize: 50, // send in batches of 50
flushIntervalMs: 5000, // flush every 5 seconds
sendOnBackground: true, // flush when app backgrounds
},
});
Replace console.log with the Logtrics logger, or intercept console output automatically:
import { logger } from '@logtrics/react-native';
// Replaces console.log/warn/error
logger.debug('App initialized');
logger.info('User signed in');
logger.warn('API response slow');
logger.error('Payment failed', { code: 402, userId: 'u123' });
Logtrics.interceptConsole();
// All existing console.log/warn/error calls now stream remotely
Tip: interceptConsole() is great for migrating existing apps without a full refactor. Use the logger API for new code to get structured metadata support.
4. Structured Logging: Beyond console.log Strings
The biggest upgrade from console.log to remote logging isn't visibility — it's structure. Structured logs carry typed metadata that you can filter, aggregate, and alert on:
// ❌ Unstructured — hard to filter or aggregate
console.log(`Payment failed for user ${userId}: ${error.message}`);
// ✅ Structured — filterable, alertable, aggregatable
logger.error('Payment failed', {
userId,
errorCode: error.code,
errorMessage: error.message,
amount: cartTotal,
paymentMethod: 'stripe',
retryCount,
networkType: await NetInfo.getNetworkType(),
});
// Now in Logtrics dashboard you can:
// - Filter all payment failures by errorCode
// - Group by paymentMethod to spot provider-specific issues
// - Alert when retryCount > 3 for a single user
5. Session & User Correlation
The most powerful feature of remote logging is the ability to replay a specific user's session. Set user context once at login, and every subsequent log is automatically tagged:
const handleLoginSuccess = async (user) => {
// Set user context — all logs now tagged with this user
Logtrics.setUser({
id: user.id,
email: user.email,
name: user.displayName,
plan: user.subscription.plan,
region: user.locale,
});
logger.info('User authenticated', { method: authMethod });
};
const handleLogout = () => {
logger.info('User logged out');
Logtrics.clearUser(); // Stop tagging logs with this user
};
When a support ticket arrives saying "[email protected] can't complete checkout," you search Logtrics by email, open their session, and see the exact log sequence — API responses, state transitions, errors — from that session, in chronological order.
6. Filtering & Searching Production Logs
Logtrics dashboard lets you search across all your production logs with powerful filters:
Filter by...
- › User ID, email, or name
- › Log level (debug / info / warn / error)
- › Device model and OS version
- › App version (isolate regressions)
- › Time range
- › Custom metadata fields
Search supports...
- › Full-text search in message body
- › Metadata key-value queries
- › Regex patterns
- › Session replay view
- › Correlation with crash events
- › Export to CSV / JSON
7. Performance Considerations
Remote logging runs on a separate background thread and uses batched transmission — it does not block your JS thread or affect UI performance. Logtrics is built for mobile constraints:
Average log call overhead on JS thread
Logs queued locally and sent in bulk over WiFi/LTE
Logs stored on-device and sent when connectivity returns
8. Logging Best Practices for React Native
Log business events, not implementation details
Log "User added item to cart" not "setState called with {cart: [...], loading: false}". Business events are meaningful across versions; implementation logs become noise.
Set minLevel to 'info' in production
Debug-level logs generate high volume and cost. In production, capture info and above. Use __DEV__ ? 'debug' : 'info' as your dynamic minLevel.
Never log PII or auth tokens
Scrub passwords, full card numbers, SSNs, and JWT tokens before logging. Pass user IDs and hashed identifiers instead. Logtrics supports SDK-level field scrubbing rules.
Add timing logs around slow operations
Log the start and end of API calls with elapsed time: logger.info('API call completed', { endpoint, durationMs }). This turns your log stream into a lightweight performance monitoring tool.
9. FAQ
Can you see console.log in React Native production apps?
No. console.log output only appears when the device is connected to Metro or a USB debugger. In production it is discarded. Use Logtrics to stream logs from user devices to a cloud dashboard you can query from anywhere.
What is remote logging in React Native?
Remote logging transmits log messages from user devices to a cloud server in real-time. From the Logtrics dashboard you can search, filter by user/device/version, and replay session logs — giving you full production visibility without device access.
How do I debug a React Native production issue without the device?
Search Logtrics by user email or ID, filter to the affected app version and time range, and replay their session logs. You'll see every API call, state transition, and error that occurred — without needing the device.
Get Full Production Visibility
Stop flying blind in production. Logtrics streams logs from every user's device so you can debug React Native issues in seconds.