生产环境下的日志记录

4

我曾经使用一个自定义类来负责日志记录,其实现如下:

public class Logger {

     public final static boolean DEBUG = true;

     public static void d(String tag, String msg) {
         if(DEBUG)
             Log.d(tag, msg);
     }

} 

当我发布应用程序时,我将标志设置为false,然而有人告诉我以下方法不太有效,因为Strings仍在内存中被分配和释放。使用以下这种方式的记录器:
Logger.d("tag", "message");

或者像这样,通过这样做,StringBuilder 将被调用。

Logger.d("tag", "server response: " + response + " timing: " + timing);

这是真的吗?dalvik/compiler不能优化以防止这种行为吗?如果可以,除了将if语句移到外面之外,还有什么我可以做来进行优化吗?

2个回答

1

0
一个简单的解决方案是在你的Activity中声明两个String变量,并在每次添加日志条目时重复使用它们,如下所示:
public class YourActivity extends Activity
{
    String tag;
    String message;

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Rest of Activity

然后,每当您想要添加日志条目时,只需设置标签/消息值:

tag = "myTag";
message = "myMessage";
Logger.d(tag, message);

这样你的if检查仍然在Logger内部,不会分配额外的内存。


如果您在整个代码中使用相同的日志,那将是很好的,但通常它是动态生成的(我将在问题中添加示例),这可能非常棒。 - Kirill Kulakov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接