How to stop Firebase from logging status updates when app is launched

IosIphoneFirebase

Ios 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:

  1. Select Scheme toolbar
  2. Edit Scheme
  3. Select Run
  4. 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:

  1. Navigate to Product -> Scheme -> Edit Scheme.
  2. Under Arguments tab in the Environment Variables section add OS_ACTIVITY_MODE = disable

enter image description here

  • 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.

Solution 11 - Ios

If you want the clean and necessary logs in console, just set your scheme like this. Open the "Edit Scheme" and select "Arguments".

  • -FIRAnalyticsDebugEnabled (don't forget "-")
  • OS_ACTIVITY_MODE = disable

enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJCodeView Question on Stackoverflow
Solution 1 - IosIan BarberView Answer on Stackoverflow
Solution 2 - IosRaphael OliveiraView Answer on Stackoverflow
Solution 3 - IosSujay U NView Answer on Stackoverflow
Solution 4 - IosJorge CasariegoView Answer on Stackoverflow
Solution 5 - IosOndřej ŠevčíkView Answer on Stackoverflow
Solution 6 - IosChatar Veer SutharView Answer on Stackoverflow
Solution 7 - IosdjabiView Answer on Stackoverflow
Solution 8 - IosrgkobashiView Answer on Stackoverflow
Solution 9 - IosadbitxView Answer on Stackoverflow
Solution 10 - Iosonmyway133View Answer on Stackoverflow
Solution 11 - IosBaran GungorView Answer on Stackoverflow