Reading and Writing Logs——读写日志

Android日志系统提供了收集和查看系统调试输出的机制。Logcat转储了系统消息的日志,包括当模拟器抛出一个错误时的堆栈信息和你在应用中使用Log类写的信息。你可以通过ADB或在DDMS中运行LogCat,它允许你实时阅读信息。

Log

Log是一个日志记录类,可以在代码中使用来打印信息到LogCat。常用的记录方法包括:

  • v(String, String) (verbose)
  • d(String, String) (debug)
  • i(String, String) (information)
  • w(String, String) (warning)
  • e(String, String) (error)

例如:

Log.i("MyActivity", "MyClass.getView() — get item number " + position);

之后Logcat就会输出类似如下内容:

I/MyActivity( 1557): MyClass.getView() — get item number 1

使用LogCat

你可以在DDMS中使用LogCat或者在ADB shell调用。通过ADB shell运行LogCat的通常使用方法是:

[adb] logcat [<option>] ... [<filter-spec>] ...

你可以在开发机中或者在模拟器/设备上的远程adb shell使用logcat命令。在开发机上查看日志输出,使用

$ adb logcat

从一个远程adb shell中使用:

/# logcat

下面的表格描述了logcat命令行选项:

选项 作用
-c 清除(刷新)整个日志比并退出
-d 转储日志到屏幕并退出
-f <filename> 写入日志信息输出到<filename>。默认是stdout
-g 打印指定缓冲大小的日志并退出
-n <count> 设置日志轮转的最大数量。默认值是4,需要 -r 选项
-r <kbytes> 设置输出的轮转日志文件大小。模式值是16,需要 -f 选项
-s 设置默认的过滤器为silent
-v <format> 设置日志信息的输出格式。默认是brief格式

过滤日志输出

每一个Android日志信息都关联着一个标签和优先级。

  • 日志消息的标签是一个短字符串,标识着消息从哪个系统组件产生的(例如,”View”代表视图系统)。
  • 优先级是下面字符串中的一个,按照从低到高优先级排序如下:
    • V - Verbose(最低优先级)
    • D - Debug
    • I - Info
    • W - Warning
    • E - Error
    • F - Fatal
    • S - Silent(最高优先级,没有任何输出)

通过运行LogCat查看每条信息以<priority>/<tag>标识着的最前面两列,可以获取到在系统中使用的标签和优先级列表。

下面的logcat输出例子显示了关联优先级”l”和标签”ActivityManager”的信息:

I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}

要减少日志输出到一个可管理水平,使用过滤表达式限制日志输出。过滤表达式让你向系统标识你所感兴趣的标签-优先级组合,系统会根据指定的标签抑制其他的信息。

一个过滤表达式遵循 tag:priority … 这种格式,其中 tag 标识感兴趣的标签, priority 标识着报告这个标签的最低优先级。这个标签的指定优先级或更高的信息被写入到日志中。你可以在一个过滤表达式中应用很多 tag:priority 规范。这一些系列的规范用空格分隔。

这里是一个过滤表达式的例子,抑制了除了以”ActivityManager”为标签、优先级在”Info”或更高的,和以”MyApp”为标签、优先级在”Debug”或更高的所有消息:

adb logcat ActivityManager:I MyApp:D *:S

上面表达式的最后一个元素*:s,设置所有的标签优先级为”silent”,因此确保了只有”ActivityManager”和”MyApp”的信息显示。使用*:s是一个很好的方式去确保日志输出使用你明确指定的过滤器进行约束——它让你的过滤器作为日志输出的“白名单”。

下面的过滤表达式显示所有标签的优先级在”warning”或更高的日志信息。

adb logcat *:W

如果你在自己的开发机上运行LogCat(相对于在一个远程adb shell运行),你也可以通过导出ANDROID_LOG_TAGS的环境变量值来设置默认的过滤表达式:

export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"

而如果你使用 adb shell logcat 运行LogCat,ANDROID_LOG_TAGS 过滤器就不会导出到模拟器/设备上。

控制日志输出格式

日志消息包含了一系列的元数据字段,及额外的标签和优先级。你可以修改信息输出格式从而显示指定的元数据字段。要这样做,使用 -v 选项,然后指定下面支持的输出格式列表中的一个。

  • brief - 显示优先级/标签和发出信息的进程PID(默认格式)
  • process - 只显示PID
  • tag - 只显示优先级/标签
  • raw - 显示原始日志消息,没有其他元数据字段
  • time - 显示日期,发生时间,优先级/标签,以及发出信息的进程PID
  • threadtime - 显示日式,发生时间,优先级,标签,以及发出信息的PID和线程TID
  • long - 显示所有的元数据字段并用空行分隔信息。

当启动LogCat时,你可以通过 -v 选项指定你想要的输出格式:

[adb] logcat [-v <format>]

这里是一个例子显示了如何生成 thread 输出格式的信息:

adb logcat -v thread

记住你只能使用 -v 选项指定一个输出格式。

查看可选日志缓冲区

Android日志系统为日志信息维持了多个循环缓冲区,并不是所有的日志信息都发送到默认的循环缓冲区。要查看额外的日志信息,你可以使用 -b 选项运行 logcat ,来请求查看一个可选循环缓冲区。你可以查看任何一个可选缓冲区:

  • radio - 查看包含radio/telephony相关信息的缓冲区
  • events - 查看包含相关事件信息的缓冲区
  • main - 查看主要的日志缓冲区(默认)

-b 选项的使用方法:

[adb] logcat [-b <buffer>]

这里是一个如何查看包含radio和telephony信息的日志缓冲区:

adb logcat -b radio

查看stdout和stderr

默认情况下,Android系统发送 stdoutstderr ( System.outSystem.err )输出到 /dev/null 。在运行Dalvik VM的进程中,你可以让系统写这个输出的副本到日志文件。这种情况下,系统使用 stdoutstderr 标签,都使用 I 优先级来写信息到日志中。

要通过这种方式重定向输出,停止运行的模拟器/设备实例,然后使用shell命令 setprop 来启用输出冲定西。这里是如何去做:

$ adb shell stop
$ adb shell setprop log.redirect-stdio true
$ adb shell start

系统保留这个设置直到你终止模拟器/设备实例。要在模拟器/设备实例上使用这个设置作为默认,你可以在设备的 /data/local.prop 添加一个条目。

调试Web应用

如果你正在开发一个Android的web应用,你可以使用控制台JavaScript APIs来调试你的JavaScript,它会输出信息到LogCat。

原文链接:

http://developer.android.com/tools/debugging/debugging-log.html

时间: 2024-10-11 12:57:41

Reading and Writing Logs——读写日志的相关文章

【DataStructure】A useful util class for reading and writing files

Faced with the upcoming exam, Some useful methods referred to file operation drew tremenous attention. Now I make a summary to reading file. [java] view plaincopy import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; impo

php分享二十六:读写日志

一:读写日志注意事项: 1:fgets取出日志行后,注意用trim过滤下 2:explode(“\t", $line) 拆分后,注意判断下个数是否正确,如果不正确,怎么处理?   如果某一列已确定是某种形式(比如$param[5]为网址,则应该判断是否是网址,如果不是怎么处理) 3:如果判断某个字符串里是否有某个值时,要记住是否必须是开头匹配,如果是则用 ^开头的正则匹配或stripos === 0 这样来匹配 4:

Reading and writing files in Java (Input/Output) - Tutorial

Java Input Output This tutorial explains how to read and write files via Java. Table of Contents 1. Java I/O (Input / Output) for files 1.1. Overview 1.2. Reading a file in Java 1.3. Writing a file in Java 1.4. How to identify the current directory 2

Apache POI – Reading and Writing Excel file in Java

来源于:https://www.mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/ In this article, we will discuss about how to read and write an excel file using Apache POI 1. Basic definitions for Apache POI library This section briefly describe a

Reading and writing

A text file is a sequence of characters stored on a permanent medium like a hard drive, flash memory, or CD-ROM. To read a file, you can use open to create a file object: Mode ‘r’ means that file is open for reading. The file object provides several

Oracle写函数读写日志实例

1.用DBA登录赋权限create or replace directory D_OUTPUT as 'D:\TEMP'; grant read,write on directory D_OUTPUT to testdb; GRANT EXECUTE ON utl_file TO testdb; 2.写一个函数创建目录并写入数据在数据清洗的存储过程中调用函数首先在上边声明变量 xx varchar2(1000);然后在执行插入失败的下面调用函数 else --insert into fail_l

Exercise 16: Reading And Writing Files

from sys import argv script, filename = argv print "We're going to erase %r." % filename print "If you don't want that, hit CTRL-C (^C)." print "If you do want that, hit RETURN." raw_input("?") print "Opening t

Profiling with Traceview and dmtracedump——使用Traceview和dmtracedump分析

Traceview是你通过在代码中使用Debug类记录跟踪信息的执行日志的图像显示.Traceview可以帮助你调试应用和分析应用性能. Traceview布局 当你有一个跟踪日志文件时(通过在应用中添加跟踪代码或DDMS生成),你可以在Traceview中加载日志文件,这样会在两个面板显示日志数据: 时间轴面板--描述每个线程和方法什么时候开始和结束 分析面板--提供在一个方法中发生的事件概要 下面部分提供关于traceview输出面板的额外信息. 时间轴面板 下图显示了时间轴面板的图像.每个

Improving Code Inspection with Annotations——使用注解改善代码检查

使用代码检查工具,例如lint,可以帮助你检查问题并改善代码,但是检查工具也就只能推断这么多.例如Android资源id,使用int来标识字符串,图形,颜色和其他资源类型,而检查工具不能告诉你当在需要指定一个颜色的地方你指定了一个字符串资源.这种情况意味着你的应用可能渲染不正确或根本运行失败,即使你使用了代码检查. 注解允许你提供暗示给像lint的代码检查工具,来帮助检测这些更精细的代码问题.它们以元数据标签添加,你可以附在变量,参数,和返回值来检查方法返回值,传递的参数,局部变量和字段.当使用