I've been implementing a logcat reader in java which uses the binary output of logcat (-B switch) rather than the text based formats. My code works for many of the entries, but frequently the binary log entries have an extra byte inserted which I can't account for, making the payload the wrong size.
>From looking at various bits of the c++ code for both the logcat program itself and the logging apis, the binary format seems to be: Header (20 bytes total): [payloadlength] 2 bytes [unused padding] 2 bytes [PID] 4 bytes [Thread ID] 4 bytes [time seconds] 4 bytes [time nanosecs] 4 bytes [payload] payloadlength bytes Payload section of the header is (payloadlength bytes total): [log priority] 1 byte [null terminated tag] unknown length, < payloadlength [null terminated log msg] unknown length, < payloadlength This file defines the struct: http://www.google.com/codesearch/p?hl=en#2wSbThBwwIw/include/cutils/logger.h&l=15 The extra byte I'm seeing occours after the nanosecond timestamp and before the log priority of the payload. e.g. Here is a hex dump of one of the log entries with the phantom byte: The byte (in this instance) is 0x1D at offset 0x14 0000:0000 | 2E 00 0D 0A C0 7C 00 00 00 9A 00 00 00 EC BA E5 4C | ....À|.......ìºåL 0000:0011 | EB E8 AA 1D 03 4B 65 79 67 75 61 72 64 56 69 65 77 | ëèª..KeyguardView 0000:0022 | 4D 65 64 69 61 74 6F 72 00 68 61 6E 64 6C 65 57 61 | Mediator.handleWa 0000:0033 | 6B 65 57 68 65 6E 52 65 61 64 79 28 32 36 29 00 | keWhenReady(26). The extra byte shifts the payload by 1, so the payload length becomes incorrect. I can't see where this byte is coming from. I also tried the LogReceiver class in ddmlib, but that also fails to handle extra byte and produces garbage after it hits an entry with the extra byte: http://www.google.com/codesearch/p?hl=en#cZwlSNS7aEw/sdk/ddms/libs/ddmlib/src/com/android/ddmlib/log/LogReceiver.java&sa=N&cd=2&ct=rc Here is a quick python script which demonstrates the problem. It reads and prints binary log entries in the expected format. It will raise an exception when it encounters an entry with an unexpected byte: http://pastebin.com/nvvsBjkZ The logcat program itself successfully reinterprets the binary format without jumping through any hoops, so I can only guess it's some kind of struct alignment artifact. Anyone encountered this or got any idea why the extra byte is appearing? -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

