armink / EasyLogger

An ultra-lightweight(ROM<1.6K, RAM<0.3k), high-performance C/C++ log library. | 一款超轻量级(ROM<1.6K, RAM<0.3k)、高性能的 C/C++ 日志库

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

建议:期望能拿到当前输出日志的level

jiladahe1997 opened this issue · comments

问题描述:日志需要上传到云端,云端期望能对日志做分级(fatal/error/warn/debug),因此建议的json格式是这样:
{ logcontent: "这是一条日志", level: "debug" }

我个人觉得好像有一丝道理。。

可以在elog_port_output函数中增加增加一个level参数。

// 现在是这样
void elog_port_output(const char *log, size_t size);
// 期望变成这样
void elog_port_output(const char *log, size_t size, level_t level);

这样的话,我就可以这样进行日志上报:

void elog_port_output(const char *log, size_t size, level_t level) {
   char log_str[1024] = {0};
   sprintf(log_str, "{ \"logconten\"t: "%s", \"level\": "%s" }", log, level);
   upload_log(log_str);
}

但是上述的方法有一个弊端:上报的日志包含了一些颜色、对齐等字符。通常上报或者保存到持久存储的日志是不希望有这些字符。另外,如果不需要上报日志,level参数也用不上。

所以建议增加一个“生命周期钩子函数”,每条日志调用 elog_port_output 输出后都会去调用这个函数,函数的参数是原本的日志内容(没有添加颜色或者其他信息),用户可以自行实现这个函数,从而自定义额外的日志保存、上传等操作。

void elog_output_hook(const char *log,level_t level);

挺好的建议,但可能得下一个大版本改动才能够去实现了

如果你着急使用的话,建议参考下我之前做的 ulog ,里面的底层输出接口应该符合你的要求

https://github.com/RT-Thread/rt-thread/blob/8feb6af99256c306ee71f28ef9844c320fd8687b/components/utilities/ulog/ulog.c#L399-L414