112

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?

JCode
  • 1,788
  • 3
  • 12
  • 29

11 Answers11

144

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
Ian Barber
  • 19,765
  • 3
  • 58
  • 58
  • 2
    Ah I checked in with the engineers - those messages will be logged regardless. With the flag though, that's all you should see. – Ian Barber May 19 '16 at 14:54
  • 22
    A `-noFIRAnalyticsDebugEnabled` was renamed to `-FIRDebugDisabled`. Other steps are the same. – Marat Saytakov Jan 14 '17 at 10:06
  • 3
    Not really good (this will likely not get added to code repositories etc and will thus cause different code depending on build method (think run/archive)). By default, release builds should have logs OFF... IMHO – Jonny Feb 23 '17 at 10:25
  • 2
    this has the awful side effect of turning of debug mode for firebase analytics – Hogdotmac Sep 24 '18 at 08:46
80

Add FirebaseConfiguration.shared.setLoggerLevel(.min) before FirebaseApp.configure() to achieve the minimum amount of logging.

func setupFirebase() {
  FirebaseConfiguration.shared.setLoggerLevel(.min)
  FirebaseApp.configure()
}
Raphael Oliveira
  • 7,751
  • 5
  • 47
  • 55
18

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()
Sujay U N
  • 4,974
  • 11
  • 52
  • 88
17

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.

Jorge Casariego
  • 21,948
  • 6
  • 90
  • 97
8

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
}
Ondřej Ševčík
  • 1,049
  • 3
  • 15
  • 31
  • 1
    As of Oct 2020, this is the only answer that got rid of the Firebase logs, but left my own logging alone. Helps for analyzing what's happening on startup of your app. – Jesse Pangburn Oct 16 '20 at 17:40
7
FIRConfiguration.sharedInstance().setLoggerLevel(.min)
FIRApp.configure()

In Swift 4

Andriy
  • 2,767
  • 2
  • 21
  • 29
Chatar Veer Suthar
  • 15,541
  • 26
  • 90
  • 154
4

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.

djabi
  • 5,601
  • 18
  • 25
4

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.

rgkobashi
  • 2,551
  • 19
  • 25
3

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.

adbitx
  • 2,019
  • 8
  • 13
3

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.

onmyway133
  • 45,645
  • 31
  • 257
  • 263
2

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

Baran Gungor
  • 176
  • 8
  • 1
    I would not recommend this. OS_ACTIVITY_LOG = disable will kill Apple's universal logging which means that any logging you do want will also disappear. – drekka Jun 21 '22 at 23:52