EasyLogger
EasyLogger copied to clipboard
建议:期望能拿到当前输出日志的level
问题描述:日志需要上传到云端,云端期望能对日志做分级(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