我不知道何时应该在Android中使用log.d()和log.w()方法

时间:2018-10-06 21:05:02

标签: android logging

Map<String, Object> city = new HashMap<>();
city.put("name", "Los Angeles");
city.put("state", "CA");
city.put("country", "USA");

db.collection("cities").document("LA")
        .set(city)
        .addOnSuccessListener(new OnSuccessListener<Void>() {
            @Override
            public void onSuccess(Void aVoid) {
                Log.d(TAG, "DocumentSnapshot successfully written!");
            }
        })
        .addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                Log.w(TAG, "Error writing document", e);
            }
        });

这是FirebaseFirestore的简单数据输入代码。 但是当我研究onSuccess()onFailure()方法时,它们每个都有一个不同的Log类方法。而且我不知道为什么这些代码在那些覆盖方法(onSuccess()onFailure())中以不同的方式使用它们。

2 个答案:

答案 0 :(得分:2)

为什么这个特定代码在另一个代码上使用一个?因为写信的人选择了。他们本来可以使用i(信息)和e(错误)。

简短的答案是使用任何您想使用的内容,因为它最终无关紧要:最终,您的消息会进入您可以查看的LogCat输出流中。

更长的答案是,您想根据要记录的信息类型登录到特定的“流”。您可以选择5种主要的日志“流”,从最开始到最晚使用的顺序在此处列出(从最低到最高):ErrorWarnInfoDebugVerbose

同样,您可以登录到任何您想要的,但通常说话的地方:

  1. 检测到有效的错误状态或异常实际上阻止您的应用正常运行时,登录到ERRORLog.e())。例如,如果您认为您正在处理switch语句的所有情况,则可以在default情况下添加错误日志,这种情况不应发生。这些情况是开发人员希望了解并解决的,即使它们没有使您的应用程序崩溃。您可能会在Crashlytics中将这些报告为“非致命”异常。

  2. 登录到WARNLog.w())以查找发生意外但非严重的错误。这些是为了提醒大家注意某些地方出了问题,但该应用程序会尽可能继续进行。在您发布的示例中,“失败侦听器”可能正在使用WARN,因为该失败是可以处理的有效情况,并且您想知道失败,但是众所周知,失败是可能的,因此应用程序应该适当地处理它并能够继续。

  3. 登录INFOLog.i()),以获取通常可以找到有用信息的信息,但不要太吵。这些将有助于您在崩溃报告中查找错误。记录活动生命周期事件就是一个例子。

  4. 登录DEBUGLog.d()),以获取在开发中暂时有助于解决特定问题或尝试查找特定bug的信息。例如,如果您的应用程序在某个特定位置崩溃,则可以在该位置之前添加一个Log.d调用,并记录局部变量的状态或一些有助于您找出崩溃原因的信息。问题或错误解决后,您可能会删除它们。

  5. 如果您需要更多甚至更频繁的信息,则登录VERBOSELog.v()),然后即可使用DEBUG。顾名思义,它打算是 verbose 。它将在LogCat中喷出大量文本,使其变得嘈杂而无法使用。例如,您可能会将长循环的每次迭代记录到VERBOSE

一旦登录到任何特定流,就可以过滤LogCat日志以帮助查找特定消息。例如,如果您在应用程序中使用的库出了问题,则可以过滤到WARN以缩小LogCat日志的大小,并查找该库可能报告的任何警告。

您可以通过选择LogCat标签中的下拉列表在Android Studio中进行过滤。 Android Studio还为每个流(您可以在设置中配置)着色,以帮助区分日志消息。

enter image description here

希望有帮助!

答案 1 :(得分:1)

他们正在呼叫different methodd代表debugw代表warning

操作失败时使用警告,一切正常时调试,只是告诉您...