Skip to content

Commit

Permalink
Use log4cplus(coturn#1344)
Browse files Browse the repository at this point in the history
  • Loading branch information
KangLin committed Dec 18, 2023
1 parent 1c7171b commit 1a163ea
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 19 deletions.
7 changes: 7 additions & 0 deletions src/apps/common/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,13 @@ else()
endif()
endif()

find_package(log4cplus)
if(log4cplus_FOUND)
list(APPEND COMMON_LIBS log4cplus::log4cplus)
list(APPEND COMMON_DEFINED HAS_LOG4CPLUS)
list(APPEND SOURCE_FILES log4cplus.cpp)
endif()

find_package(hiredis)
if(hiredis_FOUND)
list(APPEND SOURCE_FILES hiredis_libevent2.c)
Expand Down
62 changes: 62 additions & 0 deletions src/apps/common/log4cplus.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#include <log4cplus/logger.h>
#include <log4cplus/appender.h>
#include <log4cplus/hierarchylocker.h>
#include <log4cplus/hierarchy.h>
#include <log4cplus/helpers/loglog.h>
#include <log4cplus/configurator.h>
#include <log4cplus/streams.h>
#include <log4cplus/helpers/snprintf.h>
#include <log4cplus/initializer.h>
#include "ns_turn_utils.h"

using namespace log4cplus;
using namespace log4cplus::helpers;

LogLevel turn_level_to_loglevel(TURN_LOG_LEVEL level)
{
switch((int)level){
case TURN_LOG_LEVEL_DEBUG:
return DEBUG_LOG_LEVEL;
case TURN_LOG_LEVEL_INFO:
return INFO_LOG_LEVEL;
case TURN_LOG_LEVEL_WARNING:
return WARN_LOG_LEVEL;
case TURN_LOG_LEVEL_ERROR:
return ERROR_LOG_LEVEL;
}
return DEBUG_LOG_LEVEL;
}

void turn_log_func_default(char *file, int line, char* function, char *category, TURN_LOG_LEVEL level, const char *msgfmt, ...) {
int retval = -1;

try
{
Logger logger = category ? Logger::getInstance(category) : Logger::getRoot();
LogLevel ll = turn_level_to_loglevel(level);
if( logger.isEnabledFor(ll) )
{
const tchar * msg = nullptr;
snprintf_buf buf;
std::va_list ap;

do
{
va_start(ap, msgfmt);
retval = buf.print_va_list(msg, msgfmt, ap);
va_end(ap);
}
while (retval == -1);

logger.forcedLog(ll, msg, file, line, function);
}

retval = 0;
}
catch(std::exception const &)
{
// Fall through.
}

return;
}
39 changes: 24 additions & 15 deletions src/apps/common/ns_turn_utils.c
Original file line number Diff line number Diff line change
Expand Up @@ -504,8 +504,6 @@ void rollover_logfile(void) {
static int get_syslog_level(TURN_LOG_LEVEL level) {
#if defined(__unix__) || defined(unix) || defined(__APPLE__)
switch (level) {
case TURN_LOG_LEVEL_CONTROL:
return LOG_NOTICE;
case TURN_LOG_LEVEL_WARNING:
return LOG_WARNING;
case TURN_LOG_LEVEL_ERROR:
Expand All @@ -526,7 +524,8 @@ void err(int eval, const char *format, ...) {
}
#endif

void turn_log_func_default(char *file, int line, TURN_LOG_LEVEL level, const char *format, ...) {
#if !defined(HAS_LOG4CPLUS)
void turn_log_func_default(char *file, int line, char *category, TURN_LOG_LEVEL level, const char *format, ...) {
va_list args;
va_start(args, format);
#if defined(TURN_LOG_FUNC_IMPL)
Expand All @@ -543,32 +542,41 @@ void turn_log_func_default(char *file, int line, TURN_LOG_LEVEL level, const cha
so_far += snprintf(s, sizeof(s), "%lu: ", (unsigned long)log_time());
}

#if defined(WINDOWS) || defined(__CYGWIN__) || defined(__CYGWIN32__) || defined(__CYGWIN64__)
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "[%lu:%lu] ", GetCurrentProcessId(),
GetCurrentThreadId());
#else

#ifdef SYS_gettid
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "(%lu): ", (unsigned long)gettid());
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "[%lu] ", (unsigned long)gettid());
#endif

#endif

if (_log_file_line_set)
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "%s(%d):", file, line);

so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "%s(%d)", file, line);
switch (level) {
case TURN_LOG_LEVEL_DEBUG:
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "DEBUG: ");
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "DEBUG");
break;
case TURN_LOG_LEVEL_INFO:
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "INFO: ");
break;
case TURN_LOG_LEVEL_CONTROL:
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "CONTROL: ");
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "INFO");
break;
case TURN_LOG_LEVEL_WARNING:
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "WARNING: ");
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "WARNING");
break;
case TURN_LOG_LEVEL_ERROR:
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "ERROR: ");
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), "ERROR");
break;
}

if (category && strcmp(category, ""))
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), " %s", category);
so_far += snprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), ": ");

so_far += vsnprintf(s + so_far, MAX_RTPPRINTF_BUFFER_SIZE - (so_far + 1), format, args);

if (so_far > MAX_RTPPRINTF_BUFFER_SIZE + 1) {
so_far = MAX_RTPPRINTF_BUFFER_SIZE + 1;
}
Expand All @@ -584,7 +592,7 @@ void turn_log_func_default(char *file, int line, TURN_LOG_LEVEL level, const cha
#else
syslog(syslog_facility | get_syslog_level(level), "%s", s);
#endif

} else {
log_lock();
set_rtpfile();
Expand All @@ -598,6 +606,7 @@ void turn_log_func_default(char *file, int line, TURN_LOG_LEVEL level, const cha
#endif
va_end(args);
}
#endif // !defined(HAS_LOG4CPLUS)

///////////// ORIGIN ///////////////////

Expand Down
11 changes: 7 additions & 4 deletions src/apps/common/ns_turn_utils.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,9 @@
#ifndef __TURN_ULIB__
#define __TURN_ULIB__

#define TURN_LOG_CATEGORY(category, level, ...) turn_log_func_default(__FILE__, __LINE__, __FUNCTION__, category, level, __VA_ARGS__)
#if !defined(TURN_LOG_FUNC)
#define TURN_LOG_FUNC(level, ...) turn_log_func_default(__FILE__, __LINE__, level, __VA_ARGS__)
#define TURN_LOG_FUNC(level, ...) TURN_LOG_CATEGORY("", level, __VA_ARGS__)
#endif

#if defined(WINDOWS)
Expand All @@ -52,7 +53,6 @@ extern "C" {
typedef enum {
TURN_LOG_LEVEL_DEBUG = 0,
TURN_LOG_LEVEL_INFO,
TURN_LOG_LEVEL_CONTROL,
TURN_LOG_LEVEL_WARNING,
TURN_LOG_LEVEL_ERROR
} TURN_LOG_LEVEL;
Expand All @@ -71,9 +71,12 @@ void set_syslog_facility(char *val);

void set_turn_log_timestamp_format(char *new_format);

void turn_log_func_default(char *file, int line, TURN_LOG_LEVEL level, const char *format, ...)
/*!
* \note User don't use it. please use TURN_LOG_CATEGORY
*/
void turn_log_func_default(char *file, int line, char* function, char *category, TURN_LOG_LEVEL level, const char *format, ...)
#ifdef __GNUC__
__attribute__((format(printf, 4, 5)))
__attribute__((format(printf, 6, 7)))
#endif
;

Expand Down
1 change: 1 addition & 0 deletions vcpkg.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
"features": [ "openssl", "thread" ]
},
"openssl",
"log4cplus",
"sqlite3",
"libpq",
"hiredis",
Expand Down

0 comments on commit 1a163ea

Please sign in to comment.