Skip to main content
Version: 1.1.0

binary

Read logcat entries in binary format.

Only binary format is supported, because it's easier for machine to parse than text format. The output is deserialized into AndroidLogEntry objects, and can be converted back to text format.

export const LogId = {
All: -1,
Main: 0,
Radio: 1,
Events: 2,
System: 3,
Crash: 4,
Stats: 5,
Security: 6,
Kernel: 7,
} as const;

export type LogId = (typeof LogId)[keyof typeof LogId];

export interface LogcatOptions {
dump?: boolean;
pid?: number;
ids?: LogId[];
}

export const AndroidLogPriority = {
Unknown: 0,
Default: 1,
Verbose: 2,
Debug: 3,
Info: 4,
Warn: 5,
Error: 6,
Fatal: 7,
Silent: 8,
} as const;

export type AndroidLogPriority =
(typeof AndroidLogPriority)[keyof typeof AndroidLogPriority];

export interface LoggerEntry {
pid: number;
tid: number;
logId: number;
uid: number;
timestamp: bigint;
}

export interface AndroidLogEntry extends LoggerEntry {
priority: AndroidLogPriority;
tag: string;
message: string;
}

declare class Logcat {
binary(options?: LogcatOptions): ReadableStream<AndroidLogEntry>;
}

Options

dump

If set to true, only existing entries will be returned. Otherwise, it will wait and return all future entries.

Equivalent ADB Command
adb logcat -d

pid

Filter entries by process ID. If not specified, all entries will be returned.

Equivalent ADB Command
adb logcat --pid <pid>

ids

Filter entries by log ID. If not specified, all entries will be returned.

Equivalent ADB Command
adb logcat -b <id>[,<id>]*

Usage

import type { Adb } from "@yume-chan/adb";
import { Logcat } from "@yume-chan/android-bin";

declare const adb: Adb;
const logcat = new Logcat();

for await (const entry of logcat.binary()) {
console.log(entry);
}

toString()

The toString() method converts the entry into a string with the specified format.

export const LogcatFormat = {
Brief: 0,
Process: 1,
Tag: 2,
Thread: 3,
Raw: 4,
Time: 5,
ThreadTime: 6,
Long: 7,
} as const;

export type LogcatFormat = (typeof LogcatFormat)[keyof typeof LogcatFormat];

export interface LogcatFormatModifiers {
microseconds?: boolean;
nanoseconds?: boolean;
printable?: boolean;
year?: boolean;
timezone?: boolean;
epoch?: boolean;
monotonic?: boolean;
uid?: boolean;
}

declare interface AndroidLogEntry {
toString(format?: LogcatFormat, modifiers?: LogcatFormatModifiers): string;
}

All built-in formats are supported:

import type { AndroidLogEntry } from "@yume-chan/android-bin";
import { LogcatFormat } from "@yume-chan/android-bin";

declare const entry: AndroidLogEntry;

console.log(entry.toString(LogcatFormat.Brief));
console.log(entry.toString(LogcatFormat.Long));
console.log(entry.toString()); // Defaults to `LogcatFormat.ThreadTime`

and all format modifiers except color, printable and descriptive are supported:

import type { AndroidLogEntry } from "@yume-chan/android-bin";
import { LogcatFormat } from "@yume-chan/android-bin";

declare const entry: AndroidLogEntry;

console.log(entry.toString(LogcatFormat.Brief, { year: true }));