|
Packit Service |
aa3af4 |
/*
|
|
Packit Service |
aa3af4 |
* Copyright (c) 2001-2020 Mellanox Technologies, Ltd. All rights reserved.
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* This software is available to you under a choice of one of two
|
|
Packit Service |
aa3af4 |
* licenses. You may choose to be licensed under the terms of the GNU
|
|
Packit Service |
aa3af4 |
* General Public License (GPL) Version 2, available from the file
|
|
Packit Service |
aa3af4 |
* COPYING in the main directory of this source tree, or the
|
|
Packit Service |
aa3af4 |
* BSD license below:
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* Redistribution and use in source and binary forms, with or
|
|
Packit Service |
aa3af4 |
* without modification, are permitted provided that the following
|
|
Packit Service |
aa3af4 |
* conditions are met:
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* - Redistributions of source code must retain the above
|
|
Packit Service |
aa3af4 |
* copyright notice, this list of conditions and the following
|
|
Packit Service |
aa3af4 |
* disclaimer.
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* - Redistributions in binary form must reproduce the above
|
|
Packit Service |
aa3af4 |
* copyright notice, this list of conditions and the following
|
|
Packit Service |
aa3af4 |
* disclaimer in the documentation and/or other materials
|
|
Packit Service |
aa3af4 |
* provided with the distribution.
|
|
Packit Service |
aa3af4 |
*
|
|
Packit Service |
aa3af4 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
Packit Service |
aa3af4 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
Packit Service |
aa3af4 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
Packit Service |
aa3af4 |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
Packit Service |
aa3af4 |
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
Packit Service |
aa3af4 |
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
Packit Service |
aa3af4 |
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
Packit Service |
aa3af4 |
* SOFTWARE.
|
|
Packit Service |
aa3af4 |
*/
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#ifndef VLOGGER_H
|
|
Packit Service |
aa3af4 |
#define VLOGGER_H
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#ifdef HAVE_CONFIG_H
|
|
Packit Service |
aa3af4 |
#include "config.h"
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#include <iostream>
|
|
Packit Service |
aa3af4 |
#include <fstream>
|
|
Packit Service |
aa3af4 |
#include <time.h>
|
|
Packit Service |
aa3af4 |
#include <stdarg.h>
|
|
Packit Service |
aa3af4 |
#include <errno.h>
|
|
Packit Service |
aa3af4 |
#include <stdio.h>
|
|
Packit Service |
aa3af4 |
#include <stdint.h>
|
|
Packit Service |
aa3af4 |
#include "utils/bullseye.h"
|
|
Packit Service |
aa3af4 |
#include "utils/rdtsc.h"
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define TO_STR(a) TOSTR_HELPER(a)
|
|
Packit Service |
aa3af4 |
#define TOSTR_HELPER(a) #a
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#undef MODULE_HDR
|
|
Packit Service |
aa3af4 |
#define MODULE_HDR MODULE_NAME "%d:%s() "
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#undef MODULE_HDR_INFO
|
|
Packit Service |
aa3af4 |
#define MODULE_HDR_INFO MODULE_NAME "[%p]:%d:%s() "
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#undef MODULE_HDR_ENTRY
|
|
Packit Service |
aa3af4 |
#define MODULE_HDR_ENTRY "ENTER: "
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#undef MODULE_HDR_EXIT
|
|
Packit Service |
aa3af4 |
#define MODULE_HDR_EXIT "EXIT: "
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#undef __INFO__
|
|
Packit Service |
aa3af4 |
#define __INFO__ this
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define vlog_printf(_log_level, _format, ... ) \
|
|
Packit Service |
aa3af4 |
do { \
|
|
Packit Service |
aa3af4 |
if (g_vlogger_level >= (_log_level)) { \
|
|
Packit Service |
aa3af4 |
vlog_output((_log_level), _format, ##__VA_ARGS__); \
|
|
Packit Service |
aa3af4 |
} \
|
|
Packit Service |
aa3af4 |
} while (0)
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define VLOG_PRINTF( log_level, log_fmt, log_args...) vlog_printf(log_level, MODULE_HDR log_fmt "\n", __LINE__, __FUNCTION__, ##log_args)
|
|
Packit Service |
aa3af4 |
#define VLOG_PRINTF_INFO(log_level, log_fmt, log_args...) vlog_printf(log_level, MODULE_HDR_INFO log_fmt "\n", __INFO__, __LINE__, __FUNCTION__, ##log_args)
|
|
Packit Service |
aa3af4 |
#define VLOG_PRINTF_INFO_ONCE_THEN_ALWAYS(log_level_once, log_level, log_fmt,log_args...) \
|
|
Packit Service |
aa3af4 |
do { \
|
|
Packit Service |
aa3af4 |
static vlog_levels_t ___log_level = log_level_once; \
|
|
Packit Service |
aa3af4 |
VLOG_PRINTF_INFO(___log_level, log_fmt, ##log_args); \
|
|
Packit Service |
aa3af4 |
___log_level = log_level; \
|
|
Packit Service |
aa3af4 |
} while (0)
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define VLOG_PRINTF_ONCE_THEN_ALWAYS(log_level_once, log_level, log_fmt,log_args...) \
|
|
Packit Service |
aa3af4 |
do { \
|
|
Packit Service |
aa3af4 |
static vlog_levels_t ___log_level = log_level_once; \
|
|
Packit Service |
aa3af4 |
VLOG_PRINTF(___log_level, log_fmt, ##log_args); \
|
|
Packit Service |
aa3af4 |
___log_level = log_level; \
|
|
Packit Service |
aa3af4 |
} while (0)
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define VLOG_PRINTF_ONCE_THEN_DEBUG(log_level_once, log_fmt,log_args...) \
|
|
Packit Service |
aa3af4 |
do { \
|
|
Packit Service |
aa3af4 |
static vlog_levels_t ___log_level = log_level_once; \
|
|
Packit Service |
aa3af4 |
vlog_printf(___log_level, log_fmt, ##log_args); \
|
|
Packit Service |
aa3af4 |
___log_level = VLOG_DEBUG; \
|
|
Packit Service |
aa3af4 |
} while (0)
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define VLOG_PRINTF_ENTRY(log_level, log_fmt, log_args...) vlog_printf(log_level, MODULE_HDR_ENTRY "%s(" log_fmt ")\n", __FUNCTION__, ##log_args)
|
|
Packit Service |
aa3af4 |
#define VLOG_PRINTF_EXIT( log_level, log_fmt, log_args...) vlog_printf(log_level, MODULE_HDR_EXIT "%s() " log_fmt "\n", __FUNCTION__, ##log_args)
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define __log_panic(log_fmt, log_args...) do { VLOG_PRINTF(VLOG_PANIC, log_fmt, ##log_args); throw; } while (0)
|
|
Packit Service |
aa3af4 |
#define __log_err(log_fmt, log_args...) do { VLOG_PRINTF(VLOG_ERROR, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#define __log_warn(log_fmt, log_args...) do { VLOG_PRINTF(VLOG_WARNING, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#define __log_info(log_fmt, log_args...) do { VLOG_PRINTF(VLOG_INFO, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_DETAILS)
|
|
Packit Service |
aa3af4 |
#define __log_details(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_details(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_DETAILS) VLOG_PRINTF(VLOG_DETAILS, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_DEBUG)
|
|
Packit Service |
aa3af4 |
#define __log_dbg(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_dbg(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_DEBUG) VLOG_PRINTF(VLOG_DEBUG, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_FINE)
|
|
Packit Service |
aa3af4 |
#define __log_fine(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_fine(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_FINE) VLOG_PRINTF(VLOG_FINE, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_FINER)
|
|
Packit Service |
aa3af4 |
#define __log_finer(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_finer(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_FINER) VLOG_PRINTF(VLOG_FINER, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif /* VMA_MAX_DEFINED_LOG_LEVEL */
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define __log_info_panic(log_fmt, log_args...) do { VLOG_PRINTF_INFO(VLOG_PANIC, log_fmt, ##log_args); throw; } while (0)
|
|
Packit Service |
aa3af4 |
#define __log_info_err(log_fmt, log_args...) do { VLOG_PRINTF_INFO(VLOG_ERROR, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#define __log_info_warn(log_fmt, log_args...) do { VLOG_PRINTF_INFO(VLOG_WARNING, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#define __log_info_info(log_fmt, log_args...) do { VLOG_PRINTF_INFO(VLOG_INFO, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_DETAILS)
|
|
Packit Service |
aa3af4 |
#define __log_info_details(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_info_details(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_DETAILS) VLOG_PRINTF_INFO(VLOG_DETAILS, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_DEBUG)
|
|
Packit Service |
aa3af4 |
#define __log_info_dbg(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_info_dbg(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_DEBUG) VLOG_PRINTF_INFO(VLOG_DEBUG, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_FINE)
|
|
Packit Service |
aa3af4 |
#define __log_info_fine(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_info_fine(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_FINE) VLOG_PRINTF_INFO(VLOG_FINE, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_FINER)
|
|
Packit Service |
aa3af4 |
#define __log_info_finer(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_info_finer(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_FINER) VLOG_PRINTF_INFO(VLOG_FINER, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif /* VMA_MAX_DEFINED_LOG_LEVEL */
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_DEBUG)
|
|
Packit Service |
aa3af4 |
#define __log_entry_dbg(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_entry_dbg(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_DEBUG) VLOG_PRINTF_ENTRY(VLOG_DEBUG, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_FINE)
|
|
Packit Service |
aa3af4 |
#define __log_entry_fine(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_entry_fine(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_FINE) VLOG_PRINTF_ENTRY(VLOG_FINE, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_FINER)
|
|
Packit Service |
aa3af4 |
#define __log_entry_finer(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_entry_finer(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_FINER) VLOG_PRINTF_ENTRY(VLOG_FINER, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_DEBUG)
|
|
Packit Service |
aa3af4 |
#define __log_exit_dbg(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_exit_dbg(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_DEBUG) VLOG_PRINTF_EXIT(VLOG_DEBUG, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_FINE)
|
|
Packit Service |
aa3af4 |
#define __log_exit_fine(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_exit_fine(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_FINE) VLOG_PRINTF_EXIT(VLOG_FINE, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#if (VMA_MAX_DEFINED_LOG_LEVEL < DEFINED_VLOG_FINER)
|
|
Packit Service |
aa3af4 |
#define __log_exit_finer(log_fmt, log_args...) ((void)0)
|
|
Packit Service |
aa3af4 |
#else
|
|
Packit Service |
aa3af4 |
#define __log_exit_finer(log_fmt, log_args...) do { if (g_vlogger_level >= VLOG_FINER) VLOG_PRINTF_EXIT(VLOG_FINER, log_fmt, ##log_args); } while (0)
|
|
Packit Service |
aa3af4 |
#endif /* VMA_MAX_DEFINED_LOG_LEVEL */
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// deprecated functions - only exist for Backward Compatibility. Please avoid using them!
|
|
Packit Service |
aa3af4 |
#define __log_func(...) __log_fine(__VA_ARGS__)
|
|
Packit Service |
aa3af4 |
#define __log_funcall(...) __log_finer(__VA_ARGS__)
|
|
Packit Service |
aa3af4 |
#define __log_info_func(...) __log_info_fine(__VA_ARGS__)
|
|
Packit Service |
aa3af4 |
#define __log_info_funcall(...) __log_info_finer(__VA_ARGS__)
|
|
Packit Service |
aa3af4 |
#define __log_entry_func(...) __log_entry_fine(__VA_ARGS__)
|
|
Packit Service |
aa3af4 |
#define __log_entry_funcall(...) __log_entry_finer(__VA_ARGS__)
|
|
Packit Service |
aa3af4 |
#define __log_exit_func(...) __log_exit_fine(__VA_ARGS__)
|
|
Packit Service |
aa3af4 |
#define __log_exit_funcall(...) __log_exit_finer(__VA_ARGS__)
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#ifdef __cplusplus
|
|
Packit Service |
aa3af4 |
extern "C" {
|
|
Packit Service |
aa3af4 |
#endif //__cplusplus
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef enum {
|
|
Packit Service |
aa3af4 |
VLOG_INIT = DEFINED_VLOG_INIT,
|
|
Packit Service |
aa3af4 |
VLOG_NONE = DEFINED_VLOG_NONE,
|
|
Packit Service |
aa3af4 |
VLOG_PANIC = DEFINED_VLOG_PANIC,
|
|
Packit Service |
aa3af4 |
VLOG_ERROR = DEFINED_VLOG_ERROR,
|
|
Packit Service |
aa3af4 |
VLOG_WARNING = DEFINED_VLOG_WARNING,
|
|
Packit Service |
aa3af4 |
VLOG_INFO = DEFINED_VLOG_INFO, VLOG_DEFAULT = VLOG_INFO,
|
|
Packit Service |
aa3af4 |
VLOG_DETAILS = DEFINED_VLOG_DETAILS,
|
|
Packit Service |
aa3af4 |
VLOG_DEBUG = DEFINED_VLOG_DEBUG,
|
|
Packit Service |
aa3af4 |
VLOG_FINE = DEFINED_VLOG_FINE, VLOG_FUNC = VLOG_FINE,
|
|
Packit Service |
aa3af4 |
VLOG_FINER = DEFINED_VLOG_FINER, VLOG_FUNC_ALL = VLOG_FINER,
|
|
Packit Service |
aa3af4 |
VLOG_ALL = DEFINED_VLOG_ALL /* last element */
|
|
Packit Service |
aa3af4 |
} vlog_levels_t;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
namespace log_level {
|
|
Packit Service |
aa3af4 |
// convert str to vlog_levels_t; upon error - returns the given 'def_value'
|
|
Packit Service |
aa3af4 |
vlog_levels_t from_str(const char* str, vlog_levels_t def_value = VLOG_DEFAULT);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// convert int to vlog_levels_t; upon error - returns the given 'def_value'
|
|
Packit Service |
aa3af4 |
vlog_levels_t from_int(const int int_log, vlog_levels_t def_value = VLOG_DEFAULT);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
const char * to_str(vlog_levels_t level);
|
|
Packit Service |
aa3af4 |
const char * get_color(vlog_levels_t level);
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define VLOG_SINCE_YEAR 1900
|
|
Packit Service |
aa3af4 |
#define VLOG_MODULE_MAX_LEN 10
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define VLOGGER_STR_COLOR_TERMINATION_STR "\e[0m"
|
|
Packit Service |
aa3af4 |
#define VLOGGER_STR_TERMINATION_SIZE 6
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
typedef void (*vma_log_cb_t)(int log_level, const char* str);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
extern char g_vlogger_module_name[VLOG_MODULE_MAX_LEN];
|
|
Packit Service |
aa3af4 |
extern FILE* g_vlogger_file;
|
|
Packit Service |
aa3af4 |
extern int g_vlogger_fd;
|
|
Packit Service |
aa3af4 |
extern vlog_levels_t g_vlogger_level;
|
|
Packit Service |
aa3af4 |
extern vlog_levels_t* g_p_vlogger_level;
|
|
Packit Service |
aa3af4 |
extern uint8_t g_vlogger_details;
|
|
Packit Service |
aa3af4 |
extern uint8_t* g_p_vlogger_details;
|
|
Packit Service |
aa3af4 |
extern uint32_t g_vlogger_usec_on_startup;
|
|
Packit Service |
aa3af4 |
extern bool g_vlogger_log_in_colors;
|
|
Packit Service |
aa3af4 |
extern vma_log_cb_t g_vlogger_cb;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define vlog_func_enter() vlog_printf(VLOG_FINE,"ENTER %s\n", __PRETTY_FUNCTION__);
|
|
Packit Service |
aa3af4 |
#define vlog_func_exit() vlog_printf(VLOG_FINE,"EXIT %s\n",__PRETTY_FUNCTION__);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define vlog_func_all_enter() vlog_printf(VLOG_FINER,"ENTER %s\n", __PRETTY_FUNCTION__);
|
|
Packit Service |
aa3af4 |
#define vlog_func_all_exit() vlog_printf(VLOG_FINER,"EXIT %s\n",__PRETTY_FUNCTION__);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
pid_t gettid(void); // Check vlogger.cpp for implementation
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void printf_backtrace(void);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void vlog_start(const char* log_module_name, vlog_levels_t log_level = VLOG_DEFAULT, const char* log_filename = NULL, int log_details = 0, bool colored_log = true);
|
|
Packit Service |
aa3af4 |
void vlog_stop(void);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
static inline uint32_t vlog_get_usec_since_start()
|
|
Packit Service |
aa3af4 |
{
|
|
Packit Service |
aa3af4 |
struct timespec ts_now;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
BULLSEYE_EXCLUDE_BLOCK_START
|
|
Packit Service |
aa3af4 |
if (gettime(&ts_now)) {
|
|
Packit Service |
aa3af4 |
printf("%s() gettime() Returned with Error (errno=%d %m)\n", __func__, errno);
|
|
Packit Service |
aa3af4 |
return (uint32_t)-1;
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
BULLSEYE_EXCLUDE_BLOCK_END
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
if (!g_vlogger_usec_on_startup) {
|
|
Packit Service |
aa3af4 |
g_vlogger_usec_on_startup = ts_to_usec(&ts_now);
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
return (ts_to_usec(&ts_now) - g_vlogger_usec_on_startup);
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#define VLOGGER_STR_SIZE 512
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
void vlog_output(vlog_levels_t log_level, const char* fmt , ... );
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
static inline void vlog_print_buffer(vlog_levels_t log_level, const char* msg_header, const char* msg_tail, const char* buf_user, int buf_len)
|
|
Packit Service |
aa3af4 |
{
|
|
Packit Service |
aa3af4 |
if (g_vlogger_level < log_level)
|
|
Packit Service |
aa3af4 |
return;
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
int len = 0;
|
|
Packit Service |
aa3af4 |
char buf[VLOGGER_STR_SIZE];
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// Format header
|
|
Packit Service |
aa3af4 |
if (g_vlogger_level >= VLOG_DEBUG) {
|
|
Packit Service |
aa3af4 |
//vlog_time(log_level, log_msg);
|
|
Packit Service |
aa3af4 |
len = snprintf(buf, sizeof(buf)-1, " Tid: %11lx : %s %s: ",
|
|
Packit Service |
aa3af4 |
pthread_self(), g_vlogger_module_name, log_level::to_str(log_level));
|
|
Packit Service |
aa3af4 |
} else {
|
|
Packit Service |
aa3af4 |
len = snprintf(buf, sizeof(buf)-1, "%s %s: ",
|
|
Packit Service |
aa3af4 |
g_vlogger_module_name, log_level::to_str(log_level));
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
if (len < 0) {
|
|
Packit Service |
aa3af4 |
return ;
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
buf[len+1] = '\0';
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
if (msg_header)
|
|
Packit Service |
aa3af4 |
len += snprintf(buf+len, VLOGGER_STR_SIZE-len-1, "%s", msg_header);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
for (int c = 0; c < buf_len && len < (VLOGGER_STR_SIZE-1-6); c++) {
|
|
Packit Service |
aa3af4 |
len += sprintf(buf+len, "%2.2X ", (unsigned char)buf_user[c]);
|
|
Packit Service |
aa3af4 |
if ((c % 8) == 7)
|
|
Packit Service |
aa3af4 |
len += sprintf(buf+len, " ");
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
if (msg_tail)
|
|
Packit Service |
aa3af4 |
len += snprintf(buf+len, VLOGGER_STR_SIZE-len-1, "%s", msg_tail);
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
buf[len+1] = '\0';
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
// Print out
|
|
Packit Service |
aa3af4 |
if (g_vlogger_cb)
|
|
Packit Service |
aa3af4 |
{
|
|
Packit Service |
aa3af4 |
g_vlogger_cb(log_level, buf);
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
else if (g_vlogger_file)
|
|
Packit Service |
aa3af4 |
{
|
|
Packit Service |
aa3af4 |
fprintf(g_vlogger_file, "%s", buf);
|
|
Packit Service |
aa3af4 |
fflush(g_vlogger_file);
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
else
|
|
Packit Service |
aa3af4 |
{
|
|
Packit Service |
aa3af4 |
printf("%s", buf);
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
}
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#ifdef __cplusplus
|
|
Packit Service |
aa3af4 |
};
|
|
Packit Service |
aa3af4 |
#endif //__cplusplus
|
|
Packit Service |
aa3af4 |
|
|
Packit Service |
aa3af4 |
#endif // VLOGGER_H
|