How to stop Firebase from logging status updates when app is launched
IosIphoneFirebaseIos Problem Overview
Whenever I launch the FireBase app, it logs the status of various Firebase features. Right now this is what is being logged:
Configuring the default app.
<FIRAnalytics/INFO> Firebase Analytics v.3200000 started
<FIRAnalytics/INFO> To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see ...)
<FIRAnalytics/INFO> Successfully created Firebase Analytics App Delegate Proxy automatically. To disable the proxy, set the flag FirebaseAppDelegateProxyEnabled to NO in the Info.plist
<FIRInstanceID/WARNING> FIRInstanceID AppDelegate proxy enabled, will swizzle app delegate remote notification handlers. To disable add "FirebaseAppDelegateProxyEnabled" to your Info.plist and set it to NO
<FIRAnalytics/INFO> Firebase Analytics enabled
I looked through the pods and didn't find any print statements so how else would I go about stopping these from being logged overtime I run the app?
Ios Solutions
Solution 1 - Ios
You can disable the debug logging with the flag -FIRDebugDisabled
.
You can add it to your scheme:
- Select Scheme toolbar
- Edit Scheme
- Select Run
- Click Arguments and add
-FIRDebugDisabled
Solution 2 - Ios
Add FirebaseConfiguration.shared.setLoggerLevel(.min)
before FirebaseApp.configure()
to achieve the minimum amount of logging.
func setupFirebase() {
FirebaseConfiguration.shared.setLoggerLevel(.min)
FirebaseApp.configure()
}
Solution 3 - Ios
By default, Firebase will log info, errors, and warnings.
So u can set the logger level for which ever u need.
If you set for .Error you wil get min log only when error accours.
setLoggerLevel before FirebaseApp.configure() as shown below
In Swift 2.3 and Firebase 4
FirebaseConfiguration.sharedInstance().setLoggerLevel(.Error)
FirebaseApp.configure()
In Swift 3 and Firebase 4
FirebaseConfiguration.shared.setLoggerLevel(.min)
FirebaseApp.configure()
Solution 4 - Ios
In my case to hide the extra chunk of console log from Firebase I did the following:
- Navigate to Product -> Scheme -> Edit Scheme.
- Under Arguments tab in the Environment Variables section add OS_ACTIVITY_MODE = disable
- Just in case you will need that, just simply uncheck the box.
- Disabling OS_ACTIVITY_MODE sometimes will disable logs for all exceptions as well
Edit 1: As @jesus-adolfo-rodriguez said, this is related to Xcode. So, if you don’t want OSLog on the Xcode console, put OS_ACTIVITY_MODE Environment variable to “disable” in your scheme.
Edit 2:
FirebaseConfiguration.shared.setLoggerLevel(FirebaseLoggerLevel.min)
FirebaseApp.configure()
More details in the FIRConfiguration implementation here
Edit 3: 2019
According to this issue: https://github.com/firebase/firebase-ios-sdk/issues/2774#issuecomment-482780714
Adding -FIRDebugDisabled argument and cleaning the project did the trick.
The logging system in Firebase
> The logging system has two modes: default mode and debug mode. In > default mode, only logs with log level Notice, Warning and Error will > be sent to device. In debug mode, all logs will be sent to device. The > log levels that Firebase uses are consistent with the ASL log levels. > > Enable debug mode by passing the -FIRDebugEnabled argument to the > application. You can add this argument in the application’s Xcode > scheme. When debug mode is enabled via -FIRDebugEnabled, further > executions of the application will also be in debug mode. In order to > return to default mode, you must explicitly disable the debug mode > with the application argument -FIRDebugDisabled. > > It is also possible to change the default logging level in code by > calling setLoggerLevel: on the FIRConfiguration interface.
Solution 5 - Ios
Swift 4 Firebase 4.10
Set logger level in your AppDelegate.swift
FirebaseConfiguration().setLoggerLevel(FirebaseLoggerLevel.min)
Here is full code:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
FirebaseConfiguration().setLoggerLevel(FirebaseLoggerLevel.min)
FirebaseApp.configure()
return true
}
Solution 6 - Ios
FIRConfiguration.sharedInstance().setLoggerLevel(.min)
FIRApp.configure()
In Swift 4
Solution 7 - Ios
By default Firebase Analytics will only log 4 INFO lines in production + errors/warnings. That should be very little output if things work correctly. Adding -noFIRAnalyticsDebugEnabled will only disable DEBUG level logs and ERROR/WARN are always logged. If you see any warnings or errors you probably need to do something to resolve the cause. Some things will likely not work correctly if warnings/errors are logged. App that is correctly setup should not log errors/warnings.
Messages tagged with FIRInstanceID/* are logged by Firebase Notification and errors/warnings are always logged.
Solution 8 - Ios
I think there is a big and a very important confusion going on.
By using -FIRDebugDisabled
it will disable debug mode which then your measurements will be affected during testing and development.
Currently there is no way to enable debug mode and disable logs at the same time. So the FirebaseConfiguration.shared.setLoggerLevel(.min)
will work basically on not debug mode only.
As workaround you can use -noFIRAnalyticsDebugEnabled
which is only for Xcode console logging, this one does not disable your debug mode.
Solution 9 - Ios
As djabi said, you cannot disable those logs if they are INFO, WARNING or ERROR.
I want to add to Nitin Gohel's answer since I can't comment: The flag FirebaseAppDelegateProxyEnabled is not for disabling logs. If you turn it off, you will lose the auto campaign tracking and you will need to add the methods from FIRAnalytics(AppDelegate) to handle URL and user activity yourself.
Solution 10 - Ios
To add to Alex' answer, from https://firebase.google.com/docs/cloud-messaging/ios/client
FirebaseAppDelegateProxyEnabled
is for swizzling your app delegate 's methods
> The FCM API performs method swizzling in two key areas: mapping your APNs token to the FCM registration token and capturing analytics data during downstream message callback handling. Developers who prefer not to use swizzling can disable it by adding the flag FirebaseAppDelegateProxyEnabled in the app’s Info.plist file and setting it to NO (boolean value). Relevant areas of the guides provide code examples, both with and without method swizzling enabled.