当应用程序启动时,如何阻止 Firebase 记录状态更新

每当我启动 FireBase 应用程序时,它都会记录各种 FireBase 特性的状态。现在记录在案的是:

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

我检查了这些豆荚,没有发现任何打印声明,所以我还能怎么做才能阻止这些被我运行的应用程序超时记录呢?

62801 次浏览

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

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.

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.

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.

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

func setupFirebase() {
FirebaseConfiguration.shared.setLoggerLevel(.min)
FirebaseApp.configure()
}

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()

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.

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
}
FIRConfiguration.sharedInstance().setLoggerLevel(.min)
FIRApp.configure()

In Swift 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.

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