Improve logging.
Any output from the LOG family will now go to stderr and logcat on the device. stderr is usually redirected to a log file, but that is now inhibited for adbd if being run from a tty (useful when debugging with the serial console). This also fixes sending logs to the file on device for the trace mask of "all". The "all" tag was specifically handled to return early from the function, preventing the file initialization from happening. Change-Id: Id253577bfd1500fbce92dbfba0f9be23dbfd5ee4
This commit is contained in:
parent
36473768ef
commit
9313c0df20
45
adb/adb.cpp
45
adb/adb.cpp
|
@ -34,6 +34,7 @@
|
|||
#include <vector>
|
||||
#include <unordered_map>
|
||||
|
||||
#include <base/logging.h>
|
||||
#include <base/stringprintf.h>
|
||||
#include <base/strings.h>
|
||||
|
||||
|
@ -50,16 +51,25 @@
|
|||
#include <sys/mount.h>
|
||||
#endif
|
||||
|
||||
ADB_MUTEX_DEFINE( D_lock );
|
||||
ADB_MUTEX_DEFINE(D_lock);
|
||||
|
||||
int HOST = 0;
|
||||
|
||||
#if !ADB_HOST
|
||||
const char *adb_device_banner = "device";
|
||||
const char* adb_device_banner = "device";
|
||||
static android::base::LogdLogger gLogdLogger;
|
||||
#endif
|
||||
|
||||
void fatal(const char *fmt, ...)
|
||||
{
|
||||
void AdbLogger(android::base::LogId id, android::base::LogSeverity severity,
|
||||
const char* tag, const char* file, unsigned int line,
|
||||
const char* message) {
|
||||
android::base::StderrLogger(id, severity, tag, file, line, message);
|
||||
#if !ADB_HOST
|
||||
gLogdLogger(id, severity, tag, file, line, message);
|
||||
#endif
|
||||
}
|
||||
|
||||
void fatal(const char *fmt, ...) {
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
fprintf(stderr, "error: ");
|
||||
|
@ -69,8 +79,7 @@ void fatal(const char *fmt, ...)
|
|||
exit(-1);
|
||||
}
|
||||
|
||||
void fatal_errno(const char *fmt, ...)
|
||||
{
|
||||
void fatal_errno(const char* fmt, ...) {
|
||||
va_list ap;
|
||||
va_start(ap, fmt);
|
||||
fprintf(stderr, "error: %s: ", strerror(errno));
|
||||
|
@ -81,7 +90,7 @@ void fatal_errno(const char *fmt, ...)
|
|||
}
|
||||
|
||||
#if !ADB_HOST
|
||||
void start_device_log(void) {
|
||||
static std::string get_log_file_name() {
|
||||
struct tm now;
|
||||
time_t t;
|
||||
tzset();
|
||||
|
@ -91,13 +100,18 @@ void start_device_log(void) {
|
|||
char timestamp[PATH_MAX];
|
||||
strftime(timestamp, sizeof(timestamp), "%Y-%m-%d-%H-%M-%S", &now);
|
||||
|
||||
std::string path = android::base::StringPrintf("/data/adb/adb-%s-%d", timestamp, getpid());
|
||||
int fd = unix_open(path.c_str(), O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0640);
|
||||
return android::base::StringPrintf("/data/adb/adb-%s-%d", timestamp,
|
||||
getpid());
|
||||
}
|
||||
|
||||
void start_device_log(void) {
|
||||
int fd = unix_open(get_log_file_name().c_str(),
|
||||
O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC, 0640);
|
||||
if (fd == -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
// redirect stdout and stderr to the log file
|
||||
// Redirect stdout and stderr to the log file.
|
||||
dup2(fd, STDOUT_FILENO);
|
||||
dup2(fd, STDERR_FILENO);
|
||||
fprintf(stderr, "--- adb starting (pid %d) ---\n", getpid());
|
||||
|
@ -138,7 +152,7 @@ std::string get_trace_setting() {
|
|||
//
|
||||
// adb's trace setting comes from the ADB_TRACE environment variable, whereas
|
||||
// adbd's comes from the system property persist.adb.trace_mask.
|
||||
void adb_trace_init() {
|
||||
static void setup_trace_mask() {
|
||||
const std::string trace_setting = get_trace_setting();
|
||||
|
||||
std::unordered_map<std::string, int> trace_flags = {
|
||||
|
@ -173,10 +187,17 @@ void adb_trace_init() {
|
|||
adb_trace_mask |= 1 << flag->second;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void adb_trace_init(char** argv) {
|
||||
#if !ADB_HOST
|
||||
start_device_log();
|
||||
if (isatty(STDOUT_FILENO) == 0) {
|
||||
start_device_log();
|
||||
}
|
||||
#endif
|
||||
|
||||
setup_trace_mask();
|
||||
android::base::InitLogging(argv, AdbLogger);
|
||||
}
|
||||
|
||||
apacket* get_apacket(void)
|
||||
|
|
|
@ -57,9 +57,9 @@ void adb_qemu_trace(const char* fmt, ...);
|
|||
#define DQ(...) ((void)0)
|
||||
#endif /* !ADB_HOST */
|
||||
|
||||
extern int adb_trace_mask;
|
||||
extern unsigned char adb_trace_output_count;
|
||||
void adb_trace_init(void);
|
||||
extern int adb_trace_mask;
|
||||
extern unsigned char adb_trace_output_count;
|
||||
void adb_trace_init(char**);
|
||||
|
||||
# define ADB_TRACING ((adb_trace_mask & (1 << TRACE_TAG)) != 0)
|
||||
|
||||
|
|
|
@ -176,9 +176,7 @@ int adb_main(int is_daemon, int server_port) {
|
|||
|
||||
int main(int argc, char** argv) {
|
||||
adb_sysdeps_init();
|
||||
|
||||
android::base::InitLogging(argv);
|
||||
adb_trace_init();
|
||||
adb_trace_init(argv);
|
||||
D("Handling commandline()\n");
|
||||
return adb_commandline(argc - 1, const_cast<const char**>(argv + 1));
|
||||
}
|
||||
|
|
|
@ -230,8 +230,6 @@ static void close_stdin() {
|
|||
}
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
android::base::InitLogging(argv);
|
||||
|
||||
while (true) {
|
||||
static struct option opts[] = {
|
||||
{"root_seclabel", required_argument, nullptr, 's'},
|
||||
|
@ -265,7 +263,7 @@ int main(int argc, char** argv) {
|
|||
|
||||
close_stdin();
|
||||
|
||||
adb_trace_init();
|
||||
adb_trace_init(argv);
|
||||
|
||||
/* If adbd runs inside the emulator this will enable adb tracing via
|
||||
* adb-debug qemud service in the emulator. */
|
||||
|
|
Loading…
Reference in New Issue