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; 47dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pid_t pid; 48dd7bc3319deb2b77c5d07a51b7d6cd7e11b5beb0The Android Open Source Project pthread_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