From 67d96fcab422f05bf89241af93be368239ba6267 Mon Sep 17 00:00:00 2001 From: winlin Date: Thu, 17 Oct 2013 22:09:10 +0800 Subject: [PATCH] add log --- trunk/configure | 2 +- trunk/src/core/srs_core.hpp | 13 +++++ trunk/src/core/srs_core_log.cpp | 92 ++++++++++++++++++++++++++++++ trunk/src/core/srs_core_log.hpp | 40 +++++++++++++ trunk/src/main/srs_main_server.cpp | 6 ++ trunk/src/upp/upp.upp | 1 + 6 files changed, 153 insertions(+), 1 deletion(-) create mode 100755 trunk/src/core/srs_core.hpp diff --git a/trunk/configure b/trunk/configure index f0bced183..7d87945e3 100755 --- a/trunk/configure +++ b/trunk/configure @@ -81,7 +81,7 @@ LibSTfile="${LibSTRoot}/libst.a" #Core Module MODULE_ID="CORE" MODULE_DEPENDS=() -ModuleLibIncs=() +ModuleLibIncs=(${LibSTRoot}) MODULE_FILES=("srs_core_log") MODULE_DIR="src/core" . auto/modules.sh CORE_OBJS="${MODULE_OBJS[@]}" diff --git a/trunk/src/core/srs_core.hpp b/trunk/src/core/srs_core.hpp new file mode 100755 index 000000000..1275a4cb1 --- /dev/null +++ b/trunk/src/core/srs_core.hpp @@ -0,0 +1,13 @@ +#ifndef SRS_CORE_HPP +#define SRS_CORE_HPP + +/* +#include +*/ + +// for int64_t print using PRId64 format. +#ifndef __STDC_FORMAT_MACROS + #define __STDC_FORMAT_MACROS +#endif + +#endif \ No newline at end of file diff --git a/trunk/src/core/srs_core_log.cpp b/trunk/src/core/srs_core_log.cpp index 320875e50..28a25d6ef 100755 --- a/trunk/src/core/srs_core_log.cpp +++ b/trunk/src/core/srs_core_log.cpp @@ -1 +1,93 @@ #include + +#include +#include + +#include +#include + +#include + +ILogContext::ILogContext(){ +} + +ILogContext::~ILogContext(){ +} + +class LogContext : public ILogContext +{ +private: + class DateTime + { + private: + // %d-%02d-%02d %02d:%02d:%02d.%03d + #define DATE_LEN 24 + char time_data[DATE_LEN]; + public: + DateTime(); + virtual ~DateTime(); + public: + virtual const char* FormatTime(); + }; +private: + DateTime time; + std::map cache; +public: + LogContext(); + virtual ~LogContext(); +public: + virtual void SetId(); + virtual int GetId(); +public: + virtual const char* FormatTime(); +}; + +ILogContext* log_context = new LogContext(); + +LogContext::DateTime::DateTime(){ + memset(time_data, 0, DATE_LEN); +} + +LogContext::DateTime::~DateTime(){ +} + +const char* LogContext::DateTime::FormatTime(){ + // clock time + timeval tv; + if(gettimeofday(&tv, NULL) == -1){ + return ""; + } + // to calendar time + struct tm* tm; + if((tm = localtime(&tv.tv_sec)) == NULL){ + return ""; + } + + // log header, the time/pid/level of log + // reserved 1bytes for the new line. + snprintf(time_data, DATE_LEN, "%d-%02d-%02d %02d:%02d:%02d.%03d", + 1900 + tm->tm_year, 1 + tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, + (int)(tv.tv_usec / 1000)); + + return time_data; +} + +LogContext::LogContext(){ +} + +LogContext::~LogContext(){ +} + +void LogContext::SetId(){ + static int id = 0; + cache[st_thread_self()] = id++; +} + +int LogContext::GetId(){ + return cache[st_thread_self()]; +} + +const char* LogContext::FormatTime(){ + return time.FormatTime(); +} + diff --git a/trunk/src/core/srs_core_log.hpp b/trunk/src/core/srs_core_log.hpp index 3289d2e07..8a35d763e 100755 --- a/trunk/src/core/srs_core_log.hpp +++ b/trunk/src/core/srs_core_log.hpp @@ -1,4 +1,44 @@ #ifndef SRS_CORE_LOG_HPP #define SRS_CORE_LOG_HPP +/* +#include +*/ + +#include + +#include + +#include +#include + +class ILogContext +{ +public: + ILogContext(); + virtual ~ILogContext(); +public: + virtual void SetId() = 0; + virtual int GetId() = 0; +public: + virtual const char* FormatTime() = 0; +}; + +// user must implements the LogContext and define a global instance. +extern ILogContext* log_context; + +#if 0 + #define SrsVerbose(msg, ...) printf("[%s][%d][verbs] ", log_context->FormatTime(), log_context->GetId());printf(msg, ##__VA_ARGS__);printf("\n") + #define SrsInfo(msg, ...) printf("[%s][%d][infos] ", log_context->FormatTime(), log_context->GetId());printf(msg, ##__VA_ARGS__);printf("\n") + #define SrsTrace(msg, ...) printf("[%s][%d][trace] ", log_context->FormatTime(), log_context->GetId());printf(msg, ##__VA_ARGS__);printf("\n") + #define SrsWarn(msg, ...) printf("[%s][%d][warns] ", log_context->FormatTime(), log_context->GetId());printf(msg, ##__VA_ARGS__);printf(" errno=%d(%s)", errno, strerror(errno));printf("\n") + #define SrsError(msg, ...) printf("[%s][%d][error] ", log_context->FormatTime(), log_context->GetId());printf(msg, ##__VA_ARGS__);printf(" errno=%d(%s)", errno, strerror(errno));printf("\n") +#else + #define SrsVerbose(msg, ...) printf("[%s][%d][verbs][%s] ", log_context->FormatTime(), log_context->GetId(), __FUNCTION__);printf(msg, ##__VA_ARGS__);printf("\n") + #define SrsInfo(msg, ...) printf("[%s][%d][infos][%s] ", log_context->FormatTime(), log_context->GetId(), __FUNCTION__);printf(msg, ##__VA_ARGS__);printf("\n") + #define SrsTrace(msg, ...) printf("[%s][%d][trace][%s] ", log_context->FormatTime(), log_context->GetId(), __FUNCTION__);printf(msg, ##__VA_ARGS__);printf("\n") + #define SrsWarn(msg, ...) printf("[%s][%d][warns][%s] ", log_context->FormatTime(), log_context->GetId(), __FUNCTION__);printf(msg, ##__VA_ARGS__);printf(" errno=%d(%s)", errno, strerror(errno));printf("\n") + #define SrsError(msg, ...) printf("[%s][%d][error][%s] ", log_context->FormatTime(), log_context->GetId(), __FUNCTION__);printf(msg, ##__VA_ARGS__);printf(" errno=%d(%s)", errno, strerror(errno));printf("\n") +#endif + #endif diff --git a/trunk/src/main/srs_main_server.cpp b/trunk/src/main/srs_main_server.cpp index f9b886015..92aef115c 100755 --- a/trunk/src/main/srs_main_server.cpp +++ b/trunk/src/main/srs_main_server.cpp @@ -1,5 +1,11 @@ #include +#include + int main(int /*argc*/, char** /*argv*/){ + log_context->SetId(); + + SrsWarn("server start"); + return 0; } diff --git a/trunk/src/upp/upp.upp b/trunk/src/upp/upp.upp index a0a0fd8d3..3786c3477 100755 --- a/trunk/src/upp/upp.upp +++ b/trunk/src/upp/upp.upp @@ -2,6 +2,7 @@ file main readonly separator, ..\main\srs_main_server.cpp, core readonly separator, + ..\core\srs_core.hpp, ..\core\srs_core_log.hpp, ..\core\srs_core_log.cpp; mainconfig