/* See Project CHIP LICENSE file for licensing information. */ #include #include #include #include #include #include #include #ifdef USE_SYSLOG #include #endif namespace chip { namespace DeviceLayer { /** * Called whenever a log message is emitted by chip or LwIP. * * This function is intended be overridden by the application to, e.g., * schedule output of queued log entries. */ void __attribute__((weak)) OnLogOutput() {} } // namespace DeviceLayer namespace Logging { namespace Platform { /** * CHIP log output functions. */ void LogV(const char * module, uint8_t category, const char * msg, va_list v) { struct timeval tv; // Should not fail per man page of gettimeofday(), but failed to get time is not a fatal error in log. The bad time value will // indicate the error occurred during getting time. gettimeofday(&tv, nullptr); #ifdef USE_SYSLOG vsyslog(category, msg, v); #else printf("[%" PRIu64 ".%06" PRIu64 "][%lld:%lld] CHIP:%s: ", static_cast(tv.tv_sec), static_cast(tv.tv_usec), static_cast(syscall(SYS_getpid)), static_cast(syscall(SYS_gettid)), module); vprintf(msg, v); printf("\n"); fflush(stdout); #endif // Let the application know that a log message has been emitted. DeviceLayer::OnLogOutput(); } } // namespace Platform } // namespace Logging } // namespace chip