| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- /*
- * This file is part of the EasyLogger Library.
- *
- * Copyright (c) 2015-2019, Armink, <armink.ztl@gmail.com>
- *
- * Permission is hereby granted, free of charge, to any person obtaining
- * a copy of this software and associated documentation files (the
- * 'Software'), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sublicense, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice shall be
- * included in all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Function: It is an head file for this library. You can see all be called functions.
- * Created on: 2015-04-28
- */
- #ifndef __ELOG_H__
- #define __ELOG_H__
- #include <elog_cfg.h>
- #include <stdint.h>
- #include <stddef.h>
- #include <stdbool.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- /* EasyLogger software version number */
- #define ELOG_SW_VERSION "2.2.99"
- /* output log's level */
- #define ELOG_LVL_ASSERT 0
- #define ELOG_LVL_ERROR 1
- #define ELOG_LVL_WARN 2
- #define ELOG_LVL_INFO 3
- #define ELOG_LVL_DEBUG 4
- #define ELOG_LVL_VERBOSE 5
- /* the output silent level and all level for filter setting */
- #define ELOG_FILTER_LVL_SILENT ELOG_LVL_ASSERT
- #define ELOG_FILTER_LVL_ALL ELOG_LVL_VERBOSE
- /* output log's level total number */
- #define ELOG_LVL_TOTAL_NUM 6
- /* all formats index */
- typedef enum {
- ELOG_FMT_LVL = 1 << 0, /**< level */
- ELOG_FMT_TAG = 1 << 1, /**< tag */
- ELOG_FMT_TIME = 1 << 2, /**< current time */
- ELOG_FMT_P_INFO = 1 << 3, /**< process info */
- ELOG_FMT_T_INFO = 1 << 4, /**< thread info */
- ELOG_FMT_DIR = 1 << 5, /**< file directory and name */
- ELOG_FMT_FUNC = 1 << 6, /**< function name */
- ELOG_FMT_LINE = 1 << 7, /**< line number */
- } ElogFmtIndex;
- /* macro definition for all formats */
- #define ELOG_FMT_ALL (ELOG_FMT_LVL|ELOG_FMT_TAG|ELOG_FMT_TIME|ELOG_FMT_P_INFO|ELOG_FMT_T_INFO|ELOG_FMT_DIR|ELOG_FMT_FUNC|ELOG_FMT_LINE)
- /* output log's tag filter */
- typedef struct {
- uint8_t level;
- char tag[ELOG_FILTER_TAG_MAX_LEN + 1];
- bool tag_use_flag; /**< false : tag is no used true: tag is used */
- } ElogTagLvlFilter, *ElogTagLvlFilter_t;
- /* output log's filter */
- typedef struct {
- uint8_t level;
- char tag[ELOG_FILTER_TAG_MAX_LEN + 1];
- char keyword[ELOG_FILTER_KW_MAX_LEN + 1];
- ElogTagLvlFilter tag_lvl[ELOG_FILTER_TAG_LVL_MAX_NUM];
- } ElogFilter, *ElogFilter_t;
- /* easy logger */
- typedef struct {
- ElogFilter filter;
- size_t enabled_fmt_set[ELOG_LVL_TOTAL_NUM];
- bool init_ok;
- bool output_enabled;
- bool output_lock_enabled;
- bool output_is_locked_before_enable;
- bool output_is_locked_before_disable;
- #ifdef ELOG_COLOR_ENABLE
- bool text_color_enabled;
- #endif
- }EasyLogger, *EasyLogger_t;
- /* elog.c */
- int elog_init(void);
- void elog_deinit(void);
- void elog_start(void);
- void elog_stop(void);
- void elog_set_output_enabled(bool enabled);
- bool elog_get_output_enabled(void);
- void elog_set_text_color_enabled(bool enabled);
- bool elog_get_text_color_enabled(void);
- void elog_set_fmt(uint8_t level, size_t set);
- void elog_set_filter(uint8_t level, const char *tag, const char *keyword);
- void elog_set_filter_lvl(uint8_t level);
- void elog_set_filter_tag(const char *tag);
- void elog_set_filter_kw(const char *keyword);
- void elog_set_filter_tag_lvl(const char *tag, uint8_t level);
- uint8_t elog_get_filter_tag_lvl(const char *tag);
- void elog_raw_output(const char *format, ...);
- void elog_output(uint8_t level, const char *tag, const char *dirfile, const char *funcname, const long line, const char *format, ...);
- void elog_output_lock_enabled(bool enabled);
- int8_t elog_find_lvl(const char *log);
- const char *elog_find_tag(const char *log, uint8_t lvl, size_t *tag_len);
- void elog_hexdump(const char *name, uint8_t width, const void *buf, uint16_t size);
- /* elog_buf.c */
- void elog_buf_enabled(bool enabled);
- void elog_flush(void);
- /* elog_async.c */
- void elog_async_enabled(bool enabled);
- size_t elog_async_get_log(char *log, size_t size);
- size_t elog_async_get_line_log(char *log, size_t size);
- /* elog_utils.c */
- size_t elog_strcpy(size_t cur_len, char *dst, const char *src);
- size_t elog_cpyln(char *line, const char *log, size_t len);
- void *elog_memcpy(void *dst, const void *src, size_t count);
- #define elog_a(tag, ...) elog_output(ELOG_LVL_ASSERT, tag, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define elog_e(tag, ...) elog_output(ELOG_LVL_ERROR, tag, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define elog_w(tag, ...) elog_output(ELOG_LVL_WARN, tag, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define elog_i(tag, ...) elog_output(ELOG_LVL_INFO, tag, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define elog_d(tag, ...) elog_output(ELOG_LVL_DEBUG, tag, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define elog_v(tag, ...) elog_output(ELOG_LVL_VERBOSE, tag, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- /**
- * log API short definition
- * NOTE: The `LOG_TAG` and `LOG_LVL` must defined before including the <elog.h> when you want to use log_x API.
- */
- #if !defined(LOG_TAG)
- #define LOG_TAG "NO_TAG"
- #endif
- #define log_a(...) elog_output(ELOG_LVL_ASSERT, LOG_TAG, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define log_e(...) elog_output(ELOG_LVL_ERROR, LOG_TAG, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define log_w(...) elog_output(ELOG_LVL_WARN, LOG_TAG, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define log_i(...) elog_output(ELOG_LVL_INFO, LOG_TAG, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define log_d(...) elog_output(ELOG_LVL_DEBUG, LOG_TAG, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- #define log_v(...) elog_output(ELOG_LVL_VERBOSE, LOG_TAG, __FILE__, __FUNCTION__, __LINE__, __VA_ARGS__)
- /* assert API short definition */
- #if !defined(assert)
- #define assert(EXPR) if (!(EXPR)) { elog_a("elog", "(%s) has assert failed at %s:%ld.", #EXPR, __FILE__, __LINE__); while (1); }
- #endif
- #ifdef __cplusplus
- }
- #endif
- #endif /* __ELOG_H__ */
|