// Copyright 2011 Google Inc. All Rights Reserved. #include "logging.h" #include "runtime.h" #include "scoped_ptr.h" #include "stringprintf.h" #include #include #include #include #include // glibc doesn't expose gettid(2). #define __KERNEL__ # include #ifdef _syscall0 _syscall0(pid_t,gettid) #else pid_t gettid() { return syscall(__NR_gettid);} #endif #undef __KERNEL__ LogMessage::LogMessage(const char* file, int line, LogSeverity severity, int error) : line_(line), severity_(severity), errno_(error) { const char* last_slash = strrchr(file, '/'); file_ = (last_slash == NULL) ? file : last_slash + 1; stream() << StringPrintf("%c %5d %5d %s:%d] ", "IWEF"[severity], getpid(), gettid(), file_, line); } LogMessage::~LogMessage() { if (errno_ != -1) { stream() << ": " << strerror(errno_); } stream() << std::endl; if (severity_ == FATAL) { art::Runtime::Abort(file_, line_); } } std::ostream& LogMessage::stream() { return std::cerr; }