【开源】C实现的轻量级日志库需求统计
本帖最后由 sunnydragon 于 2015-4-8 12:01 编辑目前软件正在设计中,初步确认功能如下,大家要是还有常用的、急需的功能可以留言,我会结合大家的需求程度,在开发时增加进去。开源软件名称目前确认为:EasyLogger
已确认功能
[*]1、支持多种日志级别
[*]2、可设置多种输出方式(控制台、文件、串口、485...)
[*]3、日志内容可包含时间戳、线程、进程信息
[*]4、日志输出被设计为线程安全的方式
[*]5、支持多种操作系统(RT-Thread、UCOS、Linux、Windows...),也支持裸机平台
[*]6、自带控制台与文件输出两个模式,用户也可移植其他输出方式
[*]7、输出到控制台的打印日志支持RAW格式,可设定按应用、标签进行过滤
待确认功能
[*]1、每种输出方式对应一种配置(面向对象,多实例)
[*]2、在EasyFlash中增加日志存储功能,让EasyLogger与其无缝对接
[*]3、开发Web版的日志助手,兼容Linux与Windows系统,直接在网页上查看、过滤(支持正则表达式)、排序、保存日志等
也可以在下面的在线文档中添加批注
https://www.zybuluo.com/armink/note/84773
本帖最后由 sunnydragon 于 2015-4-12 15:35 编辑
好消息!EasyLogger的设计工作已近处于收尾阶段。
最新的软件需求及介绍,请大家打开这个笔记:https://www.zybuluo.com/armink/note/84773,里面对之前的功能有做详细描述。
另外,大家如果想要对这个项目有更加清晰的逻辑上的理解,请打开这个思维导图:http://naotu.baidu.com/viewshare.html?shareId=ausqm3j44f4k
欢迎大家多提建议,大家的支持是我开源的动力!也希望更多的国人加入开源队伍。
本帖最后由 sunnydragon 于 2015-6-24 22:10 编辑
EasyLogger经过一个多月的测试,目前稳定性已经很高,同时配合我之前开源的EasyFlash,可以实现日志在Flash中的存储及读取。初步估计会在7月底正式发布。想尝尝鲜的朋友们,可以去Github上关注下https://github.com/armink/EasyLogger
后期我还会提供更多的升级支持,待升级功能在这里 https://www.zybuluo.com/armink/note/117090,欢迎大家多提建议,多分享经验,让EasyLogger成为最适合嵌入式系统的日志库。
开源的项目都支持 {:biggrin:} 支持楼主{:lol:} 这个真是好想法,楼主也在github上同步了吗?我觉得应该不少人感兴趣 强力支持了 和C语言有关的代码都强烈支持! 帖子不水,感觉评论都是水军,我也跟着水一下 支持下,我觉得一个完整的系统应该包括运行跟踪系统,日志记录系统等。 支持,貌似功能很齐全 强势围观。 对flash优化吗? 发布了吗? 关注中!! 支持支持。 这个使用在欧式上的吗?裸跑的是否可行? charlesg 发表于 2015-4-7 22:50
这个真是好想法,楼主也在github上同步了吗?我觉得应该不少人感兴趣
目前是在设计阶段,等和大家确定好需求之后就可以开始开发了。到时候肯定也会在Github、OSChina、Coding平台上进行同步。 brieve 发表于 2015-4-8 01:57
支持下,我觉得一个完整的系统应该包括运行跟踪系统,日志记录系统等。 ...
是的,正式因为目前嵌入式操作系统日志管理这块,还缺少很多实用的功能辅助调试,所以才想到开源一个这样的软件。 wangyu_2011 发表于 2015-4-8 07:30
对flash优化吗?
你指的是输出日志到Flash中吗?可否说的具体些? love_zjb 发表于 2015-4-8 07:56
发布了吗?
别急,正在设计阶段,确定好需求后,开发工作很好进行。 34071417 发表于 2015-4-8 10:11
这个使用在欧式上的吗?裸跑的是否可行?
欧式指的OS?你可以仔细看下功能说明,这个不只支持OS,裸机一样会支持。 问一下,支持日志保存到Flash吗?不使用文件系统的时候存储效率怎样,最好能方便的移植到不同Flash芯片上,RAM别占用太高 支持支持 LZ好想法,顶上。 菜包 发表于 2015-4-8 11:35
问一下,支持日志保存到Flash吗?不使用文件系统的时候存储效率怎样,最好能方便的移植到不同Flash芯片上, ...
日志输出方式是非常灵活的,用户想输出到哪里都行,库自身会提供输出接口,输出后存储、显示取决于用户去移植,最好能够与我开源的另一个软件EasyFlash(http://www.amobbs.com/thread-5613261-1-1.html)无缝对接。 能不能加好友? 支持日志检索吗? 对此项目很感兴趣 youthdou 发表于 2015-4-8 11:57
能不能加好友?
联系方式见我的签名“Q” wt3333 发表于 2015-4-8 11:57
支持日志检索吗? 对此项目很感兴趣
当然支持了,就是“7、输出到控制台的打印日志支持RAW格式,可设定按应用、标签进行过滤”这个功能。
不过这样会降低效率,最好过滤的功能做好放到上位机上。 这个确实很需要,很多需要长时间运行的系统确实需要记录运行过程。 haoyurenzhu 发表于 2015-4-8 12:09
这个确实很需要,很多需要长时间运行的系统确实需要记录运行过程。
如果只是记录日志的功能,那目前有很多开源的软件,我最主要想开发的是帮助开发者提高开发效率的实用功能,降低开发周期。 楼主就是传说中的armink ? 强烈支持一下 强烈支持,我的项目中都有简单的log功能,但跟楼主的比起来就小儿科了 ljt80158015 发表于 2015-4-8 12:14
楼主就是传说中的armink ?
{:sweat:} 不要这样子。。低调低调。这个是我早起在amobbs注册的账号,就一直沿用下来。 输出到控制台的打印日志支持RAW格式,可设定按应用、标签进行过滤
这个很实用,有没有相关的参考资料啊,google raw 都是照片格式啊 boycn 发表于 2015-4-8 13:08
强烈支持,我的项目中都有简单的log功能,但跟楼主的比起来就小儿科了
这个也得看使用场景了。我的一些项目的软件都很庞大,导致日志查询起来非常麻烦,日志太多导致需要关注的信息很快就被冲掉了,调试起来极为不方便,这也就是我想开源一款实用的日志工具的起源。
如果可以也欢迎大家一起来参与到这个开源项目中,开发出来好的产品,分享给更多人。 支持一下,这个日志很有必要 不错的项目,支持。 顶楼主, 虽然目前没有用到大型系统! boycn 发表于 2015-4-8 13:27
输出到控制台的打印日志支持RAW格式,可设定按应用、标签进行过滤
可能是我描述不清楚,这个RAW格式日志的意思是从应用层提供的原始日志内容。
在某些场合,可能用户是不需要日志每行都打印时间戳、进程号等信息,只想显示自己设定好格式的内容,例如:我开源的EasyFlash,在打印所有环境变量的时候,打印日志时再把时间戳等信息封装进去就显得非常多余,所以为了用户更加灵活的去使用,才考虑增加打印原始数据的功能。
这样用户使用封装好的EasyLogger打印方法,就可以让自己的应用软件无需修改,就可以运行在Linux、Windows等任意平台上。 sunnydragon 发表于 2015-4-8 11:24
你指的是输出日志到Flash中吗?可否说的具体些?
就是日志保存到FLASH类型的存储器,如SD卡,FLASH芯片等,由于FLASH的擦写有寿命的问题,会不会考虑优化擦写寿命的问题. 支持!!!! wangyu_2011 发表于 2015-4-8 17:07
就是日志保存到FLASH类型的存储器,如SD卡,FLASH芯片等,由于FLASH的擦写有寿命的问题,会不会考虑优化擦写 ...
我想这个Flash擦除寿命和log是两个不同的领域,不是log该关心的。
应该不要直接耦合实现,只提供保存接口就好了
LZ,你怎么看? boycn 发表于 2015-4-8 13:27
输出到控制台的打印日志支持RAW格式,可设定按应用、标签进行过滤
这里的raw是原始的意思,也就是没有加工,原滋原味的log数据。
对应的,一般会在log加工,增加时间、模块等信息。
但应用、标签,再具体指什么,过滤,在哪里过滤?PC控制台对结果过滤?还是MCU输出时,直接指定过滤掉部分log,这部分log不输出?
需要LZ再举个栗子了。 wangyu_2011 发表于 2015-4-8 17:07
就是日志保存到FLASH类型的存储器,如SD卡,FLASH芯片等,由于FLASH的擦写有寿命的问题,会不会考虑优化擦写 ...
如果是使用这种大容量的存储设备,那我觉得直接移植文件系统,再将日志已文件形式保存最好。
文件系统一般都自带擦写平衡功能。如果需要Flash日志存储功能的用户特别多,我是有考虑增加这个功能到EasyFlash中去,请看1楼帖子 待确认功能 第2条。 security 发表于 2015-4-8 17:28
我想这个Flash擦除寿命和log是两个不同的领域,不是log该关心的。
应该不要直接耦合实现,只提供保存接口 ...
是的,我也是这样想到,所以我给她建议:“如果是使用这种大容量的存储设备,那我觉得直接移植文件系统,再将日志已文件形式保存最好。文件系统一般都自带擦写平衡功能。”
如果需要Flash日志存储功能的用户特别多,我是有考虑增加这个功能到EasyFlash(http://www.amobbs.com/thread-5613261-1-1.html,支持写平衡)中去。实现起来难度应该不大,最主要看大家需求程度。 本帖最后由 sunnydragon 于 2015-4-8 20:24 编辑
security 发表于 2015-4-8 17:38
这里的raw是原始的意思,也就是没有加工,原滋原味的log数据。
对应的,一般会在log加工,增加时间、模块 ...
应用我原计划是想指代为系统中的应用软件,而标签指的是应用中需要打印日志的模块,也会显示在日志每行的起始位置。所以逻辑上是应用范围大于标签范围。但考虑到系统的简化,可以只用标签来区分。
对于应用和标签的过滤是在日志系统内部就过滤掉了,不会输出到控制台。
如果用户想过滤指定的关键词,目前我的想法是交给PC端软件完成,也有考虑加入到MCU中去处理,但对系统性能肯定影响较大,所现在这个功能还在评估。 本帖最后由 wangcjishu 于 2015-4-8 20:43 编辑
支持楼主原创,之前用过log4c,楼主这个项目开发周期是多少? wangcjishu 发表于 2015-4-8 20:41
支持楼主原创,之前用过log4c,楼主这个项目开发周期是多少?
log4c可能更加适合于支持文件系统的设备。EasyLogger定位:轻量级、高性能、嵌入式系统、快捷
项目分两个阶段,参照:https://www.zybuluo.com/armink/note/84773中的说明。
这些我都是利用业余时间开发,所以时间可能会稍慢。前期阶段应该较快,开发和测试差不多两个月时间。 C实现的轻量级日志库需求统计 好像那个FreeModbus主机也是楼主写的吧,,楼主加油,永远支持你!! mark,这是个好想法。 不错,加油了! 本帖最后由 chxaitz 于 2015-6-2 23:03 编辑
哇塞,哇塞,哇塞!!!
这两天就想在网上找一个嵌入式的日志库,都找不到适合嵌入式的,然后就看到的LZ,真心激动的不行,LZ我就希望找到那种,
1.纯标准C的
2.轻量级的,
3.易移植的,
4.稳定性高的,
可是总也找不到满意的。
我现在需求的环境就是,设备要在外面测试,所以希望产生的各种常规和异常信息都能够保存下来,以备回收回来的时候好进行分析,但找不到,都想自己写个最简单的了,但是这方面没有经验,不晓得什么样的架构比较合适。。。
LZ,你把项目放到GitHub上面或者Git@OSC上面托管吧,我也可以贡献自己的一份力~O(∩_∩)O哈哈~
补充:
1.看了LZ些的《EasyLogger 开发介绍与功能说明》,其中提到,“输出方式支持:终端、文件、Flash,采用静态宏定义方式进行区分”,我感觉,是不是底层可以提供标准的接口
比如标准的三个接口
elogger_port_open();
elogger_port_write();
elogger_port_close();
在Write中一次写一条
或者只提供一个接口
elogger_port_put();
一次将缓冲区中的数据全部封包写入。
底层具体用什么媒介显示,由用户自己实现O(∩_∩)O哈哈~
2.看了那个思维导图关于上层函数的命名方式,虽然写入的那几个都是简写,但是习惯了还好,不习惯的话,还是光看到函数名,不知道它属于什么级别,所以可不可以这样,可以定义个长点的文件名,然后可以在定义个宏
比如:
#define elog_a( a , b ) elog_assert( a , b )
然后函数还是
elog_assert();
elog_error();
elog_warn();
elog_info();
elog_debug();
elog_verbose();
elog_raw();
看着比较直观~O(∩_∩)O哈哈~
3.然后是看完LZ思维导图之后的其它想法
(1).感觉RTC那个,应该是个宏比较好,并且返回time_t格式,然后内部调用<time.h>函数,实现到字符串的转换,保证时间字符串格式统一。
(2).不知LZ为何没用到动态内存申请,如果用到,还需要下面两个函数。并且关于动态内存分配,感觉FreeRTOS的heap_4.c中实现的方式不错,支持碎片合并,分配方法也比较合理,并且直接改了就能用,用到现在感觉挺稳定的,推荐给LZ。
elog_malloc();
elog_free();
(3).然后是,不知道LZ为什么还有elog_output_lock()和elog_output_unlock()这两个函数,它是用来干啥的?
4.其它
LZ我现在用OS只要堆栈开小一点,稍微复杂一点的sscanf();,在本线程中还能运行,只要一调度到下一个就崩溃,还在还不确定是否就是堆栈的问题,还是其它的,LZ有什么好推荐的吗?O(∩_∩)O哈哈~ 并且希望增加一个 assert级别的,立即强制写入函数,用来在系统进去hard_fault的时候,我可以将当前堆栈信息尝试强制立即写入相应的输出环境中,然后再重启。要是真能写进去,也能够在事后根据堆栈信息定位错误。 chxaitz 发表于 2015-6-3 00:16
并且希望增加一个 assert级别的,立即强制写入函数,用来在系统进去hard_fault的时候,我可以将当前堆栈信 ...
感谢支持哈~项目实际上早就开源并托管在Github的,在这里:https://github.com/armink/EasyLogger 基本功能都是实现了,而且还找了几个朋友一起做了内测。但是我感觉它的功能可能还不够强大,所以就一直没有正式发布出来。等我把EasyLogger与EasyFlash 无缝对接功能搞定,就可以开始正式发布了。
你上面说了一些问题,我都看了,问题有点多,我不好给你一一回复,建议你先去Github上下载最新项目,了解试用下,很多问题可能就明白了。到时候再有问题,欢迎你再随时反馈哈。 本帖最后由 chxaitz 于 2015-6-3 21:11 编辑
sunnydragon 发表于 2015-6-3 10:44
感谢支持哈~项目实际上早就开源并托管在Github的,在这里:https://github.com/armink/EasyLogger基本 ...
你好,已经试用了,没有问题,反倒是很惊喜,能够做成这个样子,真的很惊讶,它的目标绝对是星辰大海,单片机领域最好用的日志库,哈哈,然后LZ的代码习惯也非常好,都是亮点。
然后我想反馈一下我的想法:
1.关于size_t enabled_fmt_set 我建议改成 uint8 enabled_fmt_set,即显示内容的丰富度,也可以分级调整
理由:面对不同的等级,我希望输出内容有不同的复杂度,;
比如在DEBUG和INFO时,其实“路径”,“文件名”,“函数名”,“函数”这些信息都不是我需要的,其实我需要的可能就是一个时间和一个结果,比如我想做一个以太网的服务器,需要向内存卡中存储一些访问信息,需要的就只是“2015-20-11 20:11:12 ip:xx.xx.xx.xx connected”那些文件名,路径什么的都不需要,这样在文档里存储还好,后期可以检索,但显示在控制台上,真的不好识别。
比如当程序出错的时候,“文件名”,“函数名”,“行数”这些信息又是最重要的,关键时候的调试利器。
2.关于 tag 与 keyword
在控制台的时候,用来过滤信息很实用,对于存储到文件,没什么用,不过确实是挺好的东西,所以要拿出来说一下~O(∩_∩)O哈哈~
3.关于在处理时是直接将内容输出到 [输出设备],建议输出到队列,由另一个函数,在另一个子进程,或者主循环里轮询,将队列中的内容存入[输出设备]
理由:直接输出到串口也还好,但是输出到其它高延时的设备,比如FATFS通过SPI访问SD卡,我想把来自互联网的访问信息,存储到SD卡中的日志上,我如果每次都这样,在每次操作文件的时候,都会占用太多时间。所以我推荐使用队列的方式,将日志先加入缓冲列表,再由其它函数在子进程,或者无OS的主循环中通过一些触发条件,比如大小,数量,将其统一输出到 [输出设备]。
暂时就是这两个,谢谢LZ的无私奉献,又找到了一个好东西,赞一个,然后这次我问的问题不多,感觉这个LZ之前应该考虑过,也希望LZ提出自己的想法~O(∩_∩)O哈哈~ chxaitz 发表于 2015-6-3 20:37
你好,已经试用了,没有问题,反倒是很惊喜,能够做成这个样子,真的很惊讶,它的目标绝对是星辰大海,单 ...
感谢你提出这么多建议,让我又有了继续努力维护软件的动力!!
1、对于各级别日志内容显示的多样性,你提这个建议非常好,接下来我会考虑增加批量及单独修改日志显示内容API,这个方便用户,通用型也会更好。
2、首先tag及keyword这些待过滤条件,只有当日志内容较多的时候才会开滤,最关键这个过滤是可以动态配置的。你们有没有这种场景,在某些场景下,由于日志较多,可能需要只关注模块A或指定关键词的日志,这个时候可以在完全不需要修改软件的情况下,发送一个命令(例如通过以太网)来设置过滤条件,此时即便你打开文件查看的日志也会比较清晰,提高日志分析的速度。
3、你说的这种情形应该是就是我在文档中有说明的日志的异步输出方式,你可以看下这个链接:https://github.com/armink/EasyLogger#3-后期 。这个功能我是有考虑的,由于我做过一些调查,这个功能大家都反应不是太需要,所以就作为2号优先级任务。如果你有时间,也非常欢迎你来一起开发这个功能。
还有其他意见和建议,欢迎随时再反馈。 这个有意思,而且有实际价值 sunnydragon 发表于 2015-6-3 22:22
感谢你提出这么多建议,让我又有了继续努力维护软件的动力!!
1、对于各级别日志内容显示的多样性,你 ...
问LZ个问题,LZ为什么选择GPL v3协议,而不是BSD或者LGPL这一类的协议~
LZ自己的代码有商用过吗?开源吗? chxaitz 发表于 2015-6-4 02:58
问LZ个问题,LZ为什么选择GPL v3协议,而不是BSD或者LGPL这一类的协议~
LZ自己的代码有商用过吗?开源吗 ...
选择GPL v3是考虑到后期还想把它作为RTT的某个组件,由于RTT需要的GPL v2+,所以就选择的GPL v3。
我开源的软件都源于我的项目,所有软件都在我们的产品上大批量的使用。GPL v3是可以免费商用的。 sunnydragon 发表于 2015-6-10 19:24
选择GPL v3是考虑到后期还想把它作为RTT的某个组件,由于RTT需要的GPL v2+,所以就选择的GPL v3。
我开源 ...
好吧,其实我对GPL协议是反感的,感觉他并不是一个自由协议,而是一种开源绑架。
不是说它不能商用,而是说他无法闭源,对于无法闭源的产品,老板会同意吗? chxaitz 发表于 2015-6-10 19:40
好吧,其实我对GPL协议是反感的,感觉他并不是一个自由协议,而是一种开源绑架。
不是说它不能商用,而是 ...
我把协议修改为MIT了,欢迎试用和推广哈~ chxaitz 发表于 2015-6-2 22:00
哇塞,哇塞,哇塞!!!
这两天就想在网上找一个嵌入式的日志库,都找不到适合嵌入式的,然后就看到的LZ, ...
Hi,针对你的说的问题2,我已经更新了,欢迎下载试用尝尝鲜(https://github.com/armink/EasyLogger) 支持开源 这个必须顶,日志查看日常用的最多的调试手段了 sunnydragon 发表于 2015-6-24 16:18
Hi,针对你的说的问题2,我已经更新了,欢迎下载试用尝尝鲜(https://github.com/armink/EasyLogger) ...
哈哈,谢谢,最近都没上阿莫,突然看到,真是荣幸之至啊~^_^ chxaitz 发表于 2015-6-26 12:24
哈哈,谢谢,最近都没上阿莫,突然看到,真是荣幸之至啊~^_^
哈哈~还得感谢你的建议呢。 {:handshake:}{:handshake:}{:handshake:}{:handshake:} 看着不错啊~ 看起来很强大的样子,支持楼主! 感觉应该很强大,我先下来看看再给楼主反馈!谢谢楼主,楼主加油! 这个日志库没接触过,从字面意思理解就是记录一些信息,放在嵌入式环境下就是记录一下运行时的各种问题,需要保存的内容,不知道我理解的对不对,除此之外,楼主的日志库好像还有其他更强大的功能呢,楼主能不能具体讲一下 看看先,很厉害的样子
页:
[1]