1dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/*
2dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project
3dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
4dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * you may not use this file except in compliance with the License.
6dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * You may obtain a copy of the License at
7dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
8dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
10dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * See the License for the specific language governing permissions and
14dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * limitations under the License.
15dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
16dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
17dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifndef _LOGPRINT_H
18dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#define _LOGPRINT_H
19dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
20dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/log.h>
21dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/logger.h>
22dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <cutils/event_tag_map.h>
23dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#include <pthread.h>
24dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
25dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifdef __cplusplus
26dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectextern "C" {
27dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif
28dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
29dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef enum {
30dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    FORMAT_OFF = 0,
31dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    FORMAT_BRIEF,
32dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    FORMAT_PROCESS,
33dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    FORMAT_TAG,
34dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    FORMAT_THREAD,
35dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    FORMAT_RAW,
36dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    FORMAT_TIME,
37dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    FORMAT_THREADTIME,
38dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    FORMAT_LONG,
39dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} AndroidLogPrintFormat;
40dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
41dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct AndroidLogFormat_t AndroidLogFormat;
42dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
43dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projecttypedef struct AndroidLogEntry_t {
44dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    time_t tv_sec;
45dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    long tv_nsec;
46dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    android_LogPriority priority;
47d2c8f52189f8c2a13b88a107c6495f9d83196d2dAndrew Hsieh    int32_t pid;
48d2c8f52189f8c2a13b88a107c6495f9d83196d2dAndrew Hsieh    int32_t tid;
49dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    const char * tag;
50dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    size_t messageLen;
51dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    const char * message;
52dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project} AndroidLogEntry;
53dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
54dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectAndroidLogFormat *android_log_format_new();
55dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
56dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid android_log_format_free(AndroidLogFormat *p_format);
57dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
58dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectvoid android_log_setPrintFormat(AndroidLogFormat *p_format,
59dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        AndroidLogPrintFormat format);
60dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
61dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/**
62dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Returns FORMAT_OFF on invalid string
63dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
64dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source ProjectAndroidLogPrintFormat android_log_formatFromString(const char *s);
65dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
66dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/**
67dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * filterExpression: a single filter expression
68dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * eg "AT:d"
69dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
70dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * returns 0 on success and -1 on invalid expression
71dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
72dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Assumes single threaded execution
73dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
74dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
75dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
76dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint android_log_addFilterRule(AndroidLogFormat *p_format,
77dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        const char *filterExpression);
78dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
79dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
80dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/**
81dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * filterString: a whitespace-separated set of filter expressions
82dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * eg "AT:d *:i"
83dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
84dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * returns 0 on success and -1 on invalid expression
85dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
86dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Assumes single threaded execution
87dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
88dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
89dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
90dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint android_log_addFilterString(AndroidLogFormat *p_format,
91dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        const char *filterString);
92dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
93dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
94dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/**
95dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * returns 1 if this log line should be printed based on its priority
96dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * and tag, and 0 if it should not
97dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
98dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint android_log_shouldPrintLine (
99dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project        AndroidLogFormat *p_format, const char *tag, android_LogPriority pri);
100dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
101dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
102dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/**
103dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Splits a wire-format buffer into an AndroidLogEntry
104dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * entry allocated by caller. Pointers will point directly into buf
105dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
106dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Returns 0 on success and -1 on invalid wire format (entry will be
107dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * in unspecified state)
108dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
109dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint android_log_processLogBuffer(struct logger_entry *buf,
110dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project                                 AndroidLogEntry *entry);
111dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
112dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/**
113dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Like android_log_processLogBuffer, but for binary logs.
114dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
115dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * If "map" is non-NULL, it will be used to convert the log tag number
116dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * into a string.
117dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
118dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectint android_log_processBinaryLogBuffer(struct logger_entry *buf,
119dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    AndroidLogEntry *entry, const EventTagMap* map, char* messageBuf,
120dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int messageBufLen);
121dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
122dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
123dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/**
124dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Formats a log message into a buffer
125dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
126dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Uses defaultBuffer if it can, otherwise malloc()'s a new buffer
127dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * If return value != defaultBuffer, caller must call free()
128dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Returns NULL on malloc error
129dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
130dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
131dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Projectchar *android_log_formatLogLine (
132dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    AndroidLogFormat *p_format,
133dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    char *defaultBuffer,
134dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    size_t defaultBufferSize,
135dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    const AndroidLogEntry *p_line,
136dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    size_t *p_outLength);
137dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
138dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
139dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project/**
140dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Either print or do not print log line, based on filter
141dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
142dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project * Assumes single threaded execution
143dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project *
144dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project */
145e2bf2ea4d2846031edfc52b942ad53e5467243f6Joe Onoratoint android_log_printLogLine(
146dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    AndroidLogFormat *p_format,
147dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    int fd,
148dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project    const AndroidLogEntry *entry);
149dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
150dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
151dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#ifdef __cplusplus
152dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project}
153dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif
154dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
155dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project
156dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project#endif /*_LOGPRINT_H*/
157