logcat: Create liblogcat
Try to leverage as much of logcat as-is and produce a viable library API that others can use for their own logcat execution. Added a test to check ANDROID_PRINTF_LOG environment variable. Test: gTest logcat-unit-tests Bug: 35326290 Change-Id: I30de692ea9d83e6fd6e5d9e7cf93d31401a88a40
This commit is contained in:
parent
f329029081
commit
c0cf90d1fb
|
@ -1,20 +1,32 @@
|
|||
# Copyright 2006-2014 The Android Open Source Project
|
||||
|
||||
LOCAL_PATH:= $(call my-dir)
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
|
||||
logcatLibs := liblog libbase libcutils libpcrecpp
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_SRC_FILES:= logcat.cpp event.logtags
|
||||
|
||||
LOCAL_SHARED_LIBRARIES := liblog libbase libcutils libpcrecpp
|
||||
|
||||
LOCAL_MODULE := logcat
|
||||
|
||||
LOCAL_SRC_FILES := logcat_main.cpp event.logtags
|
||||
LOCAL_SHARED_LIBRARIES := liblogcat $(logcatLibs)
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
|
||||
LOCAL_CFLAGS := -Werror
|
||||
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := liblogcat
|
||||
LOCAL_SRC_FILES := logcat.cpp
|
||||
LOCAL_SHARED_LIBRARIES := $(logcatLibs)
|
||||
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
|
||||
LOCAL_EXPORT_C_INCLUDES_DIR := $(LOCAL_PATH)/include
|
||||
LOCAL_CFLAGS := -Werror
|
||||
|
||||
include $(BUILD_SHARED_LIBRARY)
|
||||
|
||||
include $(CLEAR_VARS)
|
||||
|
||||
LOCAL_MODULE := logpersist.start
|
||||
LOCAL_MODULE_TAGS := debug
|
||||
LOCAL_MODULE_CLASS := EXECUTABLES
|
||||
|
|
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Copyright (C) 2005-2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef _LIBS_LOGCAT_H /* header boilerplate */
|
||||
#define _LIBS_LOGCAT_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#ifndef __ANDROID_USE_LIBLOG_LOGCAT_INTERFACE
|
||||
#ifndef __ANDROID_API__
|
||||
#define __ANDROID_USE_LIBLOG_LOGCAT_INTERFACE 1
|
||||
#elif __ANDROID_API__ > 24 /* > Nougat */
|
||||
#define __ANDROID_USE_LIBLOG_LOGCAT_INTERFACE 1
|
||||
#else
|
||||
#define __ANDROID_USE_LIBLOG_LOGCAT_INTERFACE 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if __ANDROID_USE_LIBLOG_LOGCAT_INTERFACE
|
||||
|
||||
/* For managing an in-process logcat function, rather than forking/execing
|
||||
*
|
||||
* It also serves as the basis for the logcat command.
|
||||
*
|
||||
* The following C API allows a logcat instance to be created, run
|
||||
* to completion, and then release all the associated resources.
|
||||
*/
|
||||
|
||||
/*
|
||||
* The opaque context
|
||||
*/
|
||||
#ifndef __android_logcat_context_defined /* typedef boilerplate */
|
||||
#define __android_logcat_context_defined
|
||||
typedef struct android_logcat_context_internal* android_logcat_context;
|
||||
#endif
|
||||
|
||||
/* Creates a context associated with this logcat instance
|
||||
*
|
||||
* Returns a pointer to the context, or a NULL on error.
|
||||
*/
|
||||
android_logcat_context create_android_logcat();
|
||||
|
||||
/* Collects and outputs the logcat data to output and error file descriptors
|
||||
*
|
||||
* Will block, performed in-thread and in-process
|
||||
*
|
||||
* The output file descriptor variable, if greater than or equal to 0, is
|
||||
* where the output (ie: stdout) will be sent. The file descriptor is closed
|
||||
* on android_logcat_destroy which terminates the instance, or when an -f flag
|
||||
* (output redirect to a file) is present in the command. The error file
|
||||
* descriptor variable, if greater than or equal to 0, is where the error
|
||||
* stream (ie: stderr) will be sent, also closed on android_logcat_destroy.
|
||||
* The error file descriptor can be set to equal to the output file descriptor,
|
||||
* which will mix output and error stream content, and will defer closure of
|
||||
* the file descriptor on -f flag redirection. Negative values for the file
|
||||
* descriptors will use stdout and stderr FILE references respectively
|
||||
* internally, and will not close the references as noted above.
|
||||
*
|
||||
* Return value is 0 for success, non-zero for errors.
|
||||
*/
|
||||
int android_logcat_run_command(android_logcat_context ctx, int output, int error,
|
||||
int argc, char* const* argv, char* const* envp);
|
||||
|
||||
/* Finished with context
|
||||
*
|
||||
* Free up all associated resources.
|
||||
*
|
||||
* Return value is the result of the android_logcat_run_command, or
|
||||
* non-zero for any errors.
|
||||
*/
|
||||
int android_logcat_destroy(android_logcat_context* ctx);
|
||||
|
||||
#endif /* __ANDROID_USE_LIBLOG_LOGCAT_INTERFACE */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _LIBS_LOGCAT_H */
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,30 @@
|
|||
/*
|
||||
* Copyright (C) 2017 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#include <signal.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <log/logcat.h>
|
||||
|
||||
int main(int argc, char** argv, char** envp) {
|
||||
android_logcat_context ctx = create_android_logcat();
|
||||
if (!ctx) return -1;
|
||||
signal(SIGPIPE, exit);
|
||||
int retval = android_logcat_run_command(ctx, -1, -1, argc, argv, envp);
|
||||
int ret = android_logcat_destroy(&ctx);
|
||||
if (!ret) ret = retval;
|
||||
return ret;
|
||||
}
|
|
@ -278,7 +278,7 @@ static void do_tail(int num) {
|
|||
char buffer[BIG_BUFFER];
|
||||
|
||||
snprintf(buffer, sizeof(buffer),
|
||||
"logcat -v long -b all -t %d 2>/dev/null", num);
|
||||
"ANDROID_PRINTF_LOG=long logcat -b all -t %d 2>/dev/null", num);
|
||||
|
||||
FILE* fp;
|
||||
ASSERT_TRUE(NULL != (fp = popen(buffer, "r")));
|
||||
|
|
Loading…
Reference in New Issue