Android - Set Max Length of Logcat Messages

Android - Set max length of logcat messages

There is a fixed size buffer in logcat for binary logs (/dev/log/events) and this limit is 1024 bytes.
For the non-binary logs there is also a limit:

#define LOGGER_ENTRY_MAX_LEN        (4*1024)
#define LOGGER_ENTRY_MAX_PAYLOAD (LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))

So the real message size for both binary and non-binary logs is ~4076 bytes.
The kernel logger interface imposes this LOGGER_ENTRY_MAX_PAYLOAD limit.

The liblog sources (used by logcat) also say:

  • The message may have been truncated by the kernel log driver.

I would recommend you the nxlog tool which does not use the logcat binary, but due to the limitations in the kernel I doubt that it will solve your problem. Nevertheless, it might be worth a try. (disclaimer: I'm the author.)

What is the size limit for Logcat and how to change its capacity?

To see the size use -g

$ adb logcat -g
ring buffer is 64Kb (63Kb consumed), max entry is 4096b, max payload is 4076b

Is Android Logcat limited to 4096 characters per output call?

Is Android java StringBuilder limit 4096 characters?

No.

Is there some sort of limit I don't know about?

Yes. LogCat will not log arbitrarily-long messages.

Do I have to write out everything line by line in separate calls?

Well, I would log something smaller, or perform other sorts of diagnostics. But, yes, you could split the string into chunks and log those chunks individually.

Android studio maximum number of lines logcat

I'd like to add an update to this question, in case anyone else is looking for a way to change this on or after March of 2017.

The latest version of Android Studio, version 2.3, now has an option to change the size of the cyclic logcat buffer in Settings/Preferences.

Go to Settings/Preferences > Editor > General > Console and enable the Override console cyclic buffer size (1024KB) option. Once you enable this setting, you can enter a value in kilobytes for the logcat buffer.

It would have been better if Google added the word "logcat" in there, because it can't be found with a search of the preferences unless you specifically enter "console" or "cyclic", etc.

Edit: Google have now assigned this issue to a developer. It should be implemented soon, and I'll update this answer when it is.

Edit 2: According to Google, they have now added a setting for logcat's buffer to Dolphin Canary 6 release, and the issue is now marked as fixed.

How to display long messages in logcat

If logcat is capping the length at 1000 then you can split the string you want to log with String.subString() and log it in pieces. For example:

int maxLogSize = 1000;
for(int i = 0; i <= veryLongString.length() / maxLogSize; i++) {
int start = i * maxLogSize;
int end = (i+1) * maxLogSize;
end = end > veryLongString.length() ? veryLongString.length() : end;
Log.v(TAG, veryLongString.substring(start, end));
}

adb logcat: Increase the maximal message length

max entry and max payload are harcoded as below. So i dont think you can change them.

'#define LOGGER_ENTRY_MAX_LEN (4*1024)

'#define LOGGER_ENTRY_MAX_PAYLOAD \
(LOGGER_ENTRY_MAX_LEN - sizeof(struct logger_entry))

How to Increase Logcat Message length?

You can use DDMS, which is one option..Copy from a DDMS to any text editor..See this

The logging tag can be at most 23 characters

No, it's not a bug.

From Android Studio's Recent Changes on 1.1 Preview 2,

Checks that the tag passed to the logging calls, if its value can be resolved, is at most 23 characters long (as required by the Logging API.)

logging tag was 31

As shortly explained on the recent changes, it's due to how Log API doesn't allow tag that exceeds 23 characters.

SLF4J Android has an explanation to this:

[...] the length of such tags is currently limited to 23 characters (23 = 32 - 8 for namespace prefix - 1 for C terminator)

which matches the Android's source code.

Currently, the only function that explicitly mentions this exception is Log.isLoggable(),

...

Throws

IllegalArgumentException is thrown if the tag.length() > 23.

However, based on the comments, apparently the logger does throw the exception on release mode (it's ignored in debug mode).

You can disable the lint checking by following Terence's answer, but you've been warned.

How can I see long texts/msg in logcat?

If you want to write long messages to see in logcat it may be worth writing your own wrapper around the android.util.Log methods which splits your long message over multiple lines.



Related Topics



Leave a reply



Submit