精华内容
下载资源
问答
  • EasyLogger
    2021-06-15 16:46:06

    1. 超轻量级、高性能C日志库--EasyLogger 

    2. EasyLogger/kernel.md at master · armink/EasyLogger (github.com)

    3. EasyLogger/kernel.md at master · armink/EasyLogger (github.com)

    4. elog_cfg.h 应该是项目的配置文件

    5. 【开源解读】一款轻量级C日志库-EasyLogger

    6. 关于linux特殊含义的转义符\033 - Khazix  linux输出颜色

    elogelog_cfg.h 中  ELOG_OUTPUT_ENABLE  宏定义 ,注释则日志输出关闭。实现代码在elog.h中。(输出开关)

    elog_port.c 没有头文件,调用时,都是先用extern声明的。这个源文件是输出方式(屏幕,flash 、文件)

    5.  elogelog_cfg.h中 ELOG_FILE_ENABLE  是输出到日志文件开关。

    发现一个问题,每一次程序的日志文件不是追加 ,而是覆盖,再从代码看看

     

    更多相关内容
  • easylogger

    2018-10-27 12:56:04
    一款超轻量级(ROM, RAM)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。
  • EasyLogger

    2021-07-25 19:28:18
    相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。 1.1 主要特性 支持用户自定义输出.

    摘抄:https://github.com/armink/EasyLogger


    1. 介绍

    EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。

    1.1 主要特性

    • 支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、Flash...);
    • 日志内容可包含级别、时间戳、线程信息、进程信息等;
    • 日志输出被设计为线程安全的方式,并支持 异步输出 及 缓冲输出 模式;
    • 支持多种操作系统(RT-Thread、UCOS、Linux、Windows...),也支持裸机平台;
    • 日志支持 RAW格式 ,支持 hexdump ;
    • 支持按 标签 、 级别 、 关键词 进行动态过滤;
    • 各级别日志支持不同颜色显示;
    • 扩展性强,支持以插件形式扩展新功能。

    名词解释:

    • 1、RAW格式:未经过格式化的原始日志。
    • 2、标签:在软件中可以按照文件、模块、功能等方面,对需要打印的日志设定标签,实现日志分类。

    1.2 插件

    • 1、Flash:使用 EasyFlash 库提供的Flash操作接口,无需文件系统,直接将日志存储在 Flash 中。
    • 2、File:支持文件转档、文件循环保存等与文件日志输出相关功能。
    • 3、敬请期待……

    1.3 Star & Fork

    后续我还会提供更多插件。也非常欢迎大家设计、开发更多实用插件和功能,一起来完善 EasyLogger (Github|OSChina|Coding) 。如果觉得这个开源项目很赞,可以点击项目主页 右上角的 Star ,同时把它推荐给更多有需要的朋友。

    2. 使用

    2.1 参数配置

    EasyLogger 拥有过滤方式、输出格式、输出开关这些属性。

    • 过滤方式支持按照标签、级别、关键词进行过滤;
    • 可以动态的开启/关闭日志的输出;
    • 可设定动态和静态的输出级别
      • 静态:一级开关,通过宏定义,在编译阶段使用;
      • 动态:二级开关,通过API接口,在运行阶段使用。

    注:目前参数配置及输出方式都是单例模式,即全局只支持一种配置方式。此模式下,软件会较为简单,但是无法支持复杂的输出方式。

    2.2 输出级别

    参考 Android Logcat ,级别最高为 0(Assert) ,最低为 5(Verbose) 。

    0.[A]:断言(Assert)
    1.[E]:错误(Error)
    2.[W]:警告(Warn)
    3.[I]:信息(Info)
    4.[D]:调试(Debug)
    5.[V]:详细(Verbose)
    

    2.2.1 输出缤纷多彩的日志

    各个级别日志默认颜色效果如下。用户也可以根据自己的喜好,在 elog_cfg.h 对各个级别日志的颜色及字体风格进行单独设置。

    TextColor

    2.3 输出过滤

    支持按照 级别、标签及关键词 进行过滤。日志内容较多时,使用过滤功能可以更快定位日志,保证日志的可读性。更多的过滤功能设置方法及细节请阅读\docs\zh\api\kernel.md文档

    注:RAW格式、hexdump 格式日志不支持标签、关键词过滤

    2.4 输出格式

    输出格式支持:级别、时间、标签、进程信息、线程信息、文件路径、行号、方法名。每种优先级别可以独立设置输出格式。

    2.5 输出方式

    通过用户的移植,可以支持任何一种输出方式。只不过对于某种输出方式可能引入的新功能,需要通过插件实现,例如:文件转存,检索Flash日志等等。后期会有更多的插件开源出来。下面简单对比下部分输出方式使用场景:

    • 终端:方便用户动态查看,不具有存储功能;
    • 文件与Flash:都具有存储功能,用户可以查看历史日志。但是文件方式需要文件系统的支持,而Flash方式更加适合应用在无文件系统的小型嵌入式设备中。

    2.6 Demo

    2.6.1 核心功能

    下图为在终端中输入命令来控制日志的输出及过滤器的设置,更加直观的展示了 EasyLogger 核心功能。

    easylogger

    2.6.2 Flash Log(将日志保存到 Flash 中)

    下图过程为通过控制台输出日志,并将输出的日志存储到 Flash 中。重启再读取上次保存的日志,最后清空 Flash 日志。

    FlashLog

    2.6.2 File Log(将日志保存到文件中)

    通过 FIle 插件,可以将日志自动保存至文件中。每个文件可以设定大小,超过规定大小后,自动新建新的文件来存储日志。

    3. 文档

    具体内容参考\docs\zh\下的文件。务必保证在 阅读文档 后再移植使用。

    4. 后期

    •  Flash存储:在EasyFlash中增加日志存储、读取功能,让EasyLogger与其无缝对接。使日志可以更加容易的存储在 非文件系统 中,并具有历史日志检索的功能;
    •  配置文件:文件系统下的配置文件;
    •  文件转档:文件系统下支持文件按容量转档,按时间区分;
    •  日志助手:开发跨平台的日志助手,兼容Linux、Windows、Mac系统,打开助手即可查看、过滤(支持正则表达式)、排序、保存日志等。前端:HTML5 + Bootstrap + AngularJS + NW.js,后端:Rust + iron + rust-websocket + serial-rs
    •  异步输出:目前日志输出与用户代码之间是同步的方式,这种方式虽然软件简单,也不存在日志覆盖的问题。但在输出速度较低的平台下,会由于增加日志功能,而降低软件运行速度。所以后期会增加 异步输出 方式,关键字过滤也可以放到异步输出中去;
    •  Arduino:增加Arduino lib,并提供其Demo;

    5. 许可

    MIT Copyright (c) armink.ztl@gmail.com

    展开全文
  • Qt移植EasyLogger,实现彩色日志显示完整工程
  • EasyLogger 是一款超轻量级(ROM, RAM)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加...
  • STM32H750板子上移植EasyLogger日志组件,输出带颜色的文字
  • 在github上面下载的easylogger的windows下面demo不用直接使用,这里做了一下修改,加入了pthread库,直接打开工程编译即可使用。
  • 嵌入式开源项目精选专栏 本专栏由Mculover666创建,主要内容为寻找嵌入式领域内的优质开源项目,一是帮助开发者使用开源项目实现更多的功能,二是通过这些开源项目,学习大佬的代码及背后的实现思想,提升自己的代码...
  • freertos移植easylogger

    2022-04-19 17:32:31
    FreeRTOS移植Easylogger 获取EasyLogger代码以及添加至工程 从github上git clone https://github.com/armink/EasyLoggerEasyLogger中的easylogger目录拷贝到工程中 添加头文件和源代码至CMakeLists.txt中 ...

    FreeRTOS移植Easylogger

    获取EasyLogger代码以及添加至工程

    1. 从github上git clone https://github.com/armink/EasyLogger

    2. 将EasyLogger中的easylogger目录拷贝到工程中

    3. 添加头文件和源代码至CMakeLists.txt中

      在这里插入图片描述

    修改elog_cfg.h

    在这里插入图片描述

    修改elog_port.c

    /*
     * This file is part of the EasyLogger Library.
     *
     * Copyright (c) 2015, 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: Portable interface for each platform.
     * Created on: 2015-04-28
     */
     
    #include <elog.h>
    #include <stdio.h>
    #include "FreeRTOS.h"
    #include "task.h"
    #include "semphr.h"
    
    //! 日志互斥信号量句柄
    static SemaphoreHandle_t LogMutexSemaphore = NULL; 
    
    /**
     * EasyLogger port initialize
     *
     * @return result
     */
    ElogErrCode elog_port_init(void) {
        ElogErrCode result = ELOG_NO_ERR;
    
        /* add your code here */
        //! 创建互斥信号值
        LogMutexSemaphore = xSemaphoreCreateMutex();
        if (LogMutexSemaphore == NULL) {
            printf("elog sem create fail\r\n");
            result =  ELOG_SEM_FAIL;	//!< 注意:ElogErrCode 枚举中没有这个类型,需要添加一个错误类型
        }
    
        return result;
    }
    
    /**
     * EasyLogger port deinitialize
     *
     */
    void elog_port_deinit(void) {
    
        /* add your code here */
    
    }
    
    /**
     * output log port interface
     *
     * @param log output of log
     * @param size log size
     */
    void elog_port_output(const char *log, size_t size) {
        
        /* add your code here */
        //! %s 表示字符串输出,
        //! .<十进制数> 是精度控制格式符,输出字符时表示输出字符的位数,
        //! 在精度控制时,小数点后的十进制数可以使用 * 来占位,
        //! 在后面提供一个变量作为精度控制的具体值
        printf("%.*s", size, log);
    }
    
    /**
     * output lock
     */
    void elog_port_output_lock(void) {
        
        /* add your code here */
        if (NULL != LogMutexSemaphore)
        {
            xSemaphoreTake(LogMutexSemaphore, portMAX_DELAY); //!< 等待互斥信号量
        }   
    }
    
    /**
     * output unlock
     */
    void elog_port_output_unlock(void) {
        
        /* add your code here */
        if (NULL != LogMutexSemaphore)
        {
            xSemaphoreGive(LogMutexSemaphore); //!< 发送互斥信号量
        } 
    }
    
    /**
     * get current time interface
     *
     * @return current time
     */
    const char *elog_port_get_time(void) {
        
        /* add your code here */
        static char cur_system_time[16] = { 0 };
    
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
        if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
        {
    #endif
            TickType_t tick = xTaskGetTickCount();
            snprintf(cur_system_time, 16, "%d.%.3d", (tick / configTICK_RATE_HZ), tick % configTICK_RATE_HZ);
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
        }
    #endif 
    
        return cur_system_time;
    }
    
    /**
     * get current process name interface
     *
     * @return current process name
     */
    const char *elog_port_get_p_info(void) {
        
        /* add your code here */
        return "";
    }
    
    /**
     * get current thread name interface
     *
     * @return current thread name
     */
    const char *elog_port_get_t_info(void) {
        
        /* add your code here */
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
        if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
        {
    #endif
            return pcTaskGetName(xTaskGetCurrentTaskHandle());
    #if (INCLUDE_xTaskGetSchedulerState  == 1 )
        }
    #endif 
    
        return "";
    }
    
    /**
     * init easylogger,这个函数是我们自己添加的,便于用户直接调用,需要在elog.h中添加声明
     */
    void easylogger_init(void)
    {
        /* init Easylogger */
    	elog_init();
    
    	/* set EasyLogger log format */
        elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_ALL);
    	elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL | ELOG_FMT_TIME | ELOG_FMT_T_INFO);
    	elog_set_fmt(ELOG_LVL_WARN, ELOG_FMT_LVL | ELOG_FMT_T_INFO);
    	elog_set_fmt(ELOG_LVL_INFO, ELOG_FMT_LVL);
    	elog_set_fmt(ELOG_LVL_DEBUG, ELOG_FMT_ALL & ~ELOG_FMT_FUNC);
    
    	/*Eenbale color*/
    	elog_set_text_color_enabled(true);
    
    	/* start EasyLogger */
    	elog_start();
        
    }
    

    测试

    //! 在main中调用
    void test(void)
    {
        log_a("Hello EasyLogger!");
        log_e("Hello EasyLogger!");
        log_w("Hello EasyLogger!");
        log_i("Hello EasyLogger!");
        log_d("Hello EasyLogger!");
        log_v("Hello EasyLogger!");
    }
    
    //! 在线程中调用, 这里使用了letter shell组件;直接在线程中执行效果一样
    void shell_cmd_elog(int argc, char *argv[])
    {
        log_a("Hello EasyLogger!");
        log_e("Hello EasyLogger!");
        log_w("Hello EasyLogger!");
        log_i("Hello EasyLogger!");
        log_d("Hello EasyLogger!");
        log_v("Hello EasyLogger!");
    }
    SHELL_EXPORT_CMD(elog, shell_cmd_elog, test easylogger);
    

    结果

    在这里插入图片描述

    展开全文
  • C语言Log工具推荐-easylogger

    千次阅读 2021-02-28 10:46:37
    文章目录日志简述EasyLogger简介编译运行附录EasyLogger说明1. 介绍1.1 主要特性1.2 插件1.3 Star & Fork2. 使用2.1 参数配置2.2 输出级别2.2.1 输出缤纷多彩的日志2.3 输出过滤2.4 输出格式2.5 输出方式2.6 ...

    日志简述

    C/CPP的日志工具也很多,在之前的项目中用过的有以下几个:zlog、spdlog、log4cpp等。

    zlog之前也介绍过,这个日志工具我在使用的时候遇到过2个问题:

    1.多线程输出比较频繁的时候,切换文件时程序会挂掉;

    2.有的平台下面,切换文件时,程序挂掉再无法启动,只能手动删除日志文件,或者不让日志输出到文件;

    zlog使用是挺方便,也很快,就是有上面两个问题,所以后来考虑换掉。

    spdlog之前也介绍过。这个也挺好用,只需要包含头文件即可,只是这个日志依赖于c++11,有些编译器比较老,不支持,c语言也无法使用。

    今天要介绍的这个日志是easylogger,这个是c语言的版本,所以c/c++都可以用,这个日志官方提供的demo和文档比较全,我就不再多说了。

    EasyLogger简介

    主要是对其源文件的使用做个调整。将对其源码引用的操作单独做了一个Makefile,这样使用的时候只需要在项目代码的Makefile里引用一下它的

    Makefile即可:
    demo 的结构如下:

    .
    ├── easylogger              
    │   ├── easylogger   ---- 移植修改文件
    │   │   ├── inc     
    │   │   └── port
    │   └── source_code ----- 源码目录
    │       ├── inc
    │       ├── obj
    │       ├── plugins
    │       │   ├── file
    │       │   └── flash
    │       ├── port
    │       └── src
    ├── main.c-bak	   --- 测试主函数代码
    ├── main.cpp	   --- 同main.c-bake
    ├── Makefile	   --- 测试代码Makefile(这个也是一个通用的Makefile)
    ├── Makefile.log   --- 源码配置Makefile
    └── out
    
    

    这里将日志的相关文件与头文件路径在Makefile.log里封装好了,该目录下的Makefile为新增的Makefile,在这个Makefile里调用日志源码的Makefile.log,并添加目标文件,这样使用起来比较简单:

    include ./Makefile.log   #包含源码文件的makefile
    OBJS+=$(LOG_OBJ)         #添加目标文件
    

    #编译测试

    编译

    执行make:

    g++ -I./easylogger/easylogger/inc -I./easylogger/source_code/inc -I./easylogger/source_code/plugins/file -O0 -g3 -Wall -Wall  -I. -c main.cpp -o out/main.o 
    main.cpp: In function ‘void test_elog()’:
    main.cpp:80:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (i = 0; i < sizeof(buf); i++)
                       ^
    gcc -I./easylogger/easylogger/inc -I./easylogger/source_code/inc -I./easylogger/source_code/plugins/file -O0 -g3 -Wall -Wall  -I.   -c -o easylogger/source_code/src/elog_utils.o easylogger/source_code/src/elog_utils.c
    gcc -I./easylogger/easylogger/inc -I./easylogger/source_code/inc -I./easylogger/source_code/plugins/file -O0 -g3 -Wall -Wall  -I.   -c -o easylogger/source_code/src/elog.o easylogger/source_code/src/elog.c
    gcc -I./easylogger/easylogger/inc -I./easylogger/source_code/inc -I./easylogger/source_code/plugins/file -O0 -g3 -Wall -Wall  -I.   -c -o easylogger/source_code/src/elog_buf.o easylogger/source_code/src/elog_buf.c
    gcc -I./easylogger/easylogger/inc -I./easylogger/source_code/inc -I./easylogger/source_code/plugins/file -O0 -g3 -Wall -Wall  -I.   -c -o easylogger/source_code/src/elog_async.o easylogger/source_code/src/elog_async.c
    gcc -I./easylogger/easylogger/inc -I./easylogger/source_code/inc -I./easylogger/source_code/plugins/file -O0 -g3 -Wall -Wall  -I.   -c -o easylogger/source_code/plugins/file/elog_file.o easylogger/source_code/plugins/file/elog_file.c
    gcc -I./easylogger/easylogger/inc -I./easylogger/source_code/inc -I./easylogger/source_code/plugins/file -O0 -g3 -Wall -Wall  -I.   -c -o easylogger/easylogger/port/elog_file_port.o easylogger/easylogger/port/elog_file_port.c
    gcc -I./easylogger/easylogger/inc -I./easylogger/source_code/inc -I./easylogger/source_code/plugins/file -O0 -g3 -Wall -Wall  -I.   -c -o easylogger/easylogger/port/elog_port.o easylogger/easylogger/port/elog_port.c
    g++ ./out/main.o  ./easylogger/source_code/src/elog_utils.o  ./easylogger/source_code/src/elog.o  ./easylogger/source_code/src/elog_buf.o  ./easylogger/source_code/src/elog_async.o  ./easylogger/source_code/plugins/file/elog_file.o  ./easylogger/easylogger/port/elog_file_port.o  ./easylogger/easylogger/port/elog_port.o -o test -I./easylogger/easylogger/inc -I./easylogger/source_code/inc -I./easylogger/source_code/plugins/file -O0 -g3 -Wall -Wall  -I. -lpthread
    strip test
    
    

    运行

    可执行文件名称为test:
    运行结果
    日志的输出效果还是挺好的,对于数组可以直接用十六进制的形式输出出来,调试也很方便。

    附录EasyLogger说明


    1. 介绍

    EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。

    1.1 主要特性

    • 支持用户自定义输出方式(例如:终端、文件、数据库、串口、485、Flash…);
    • 日志内容可包含级别、时间戳、线程信息、进程信息等;
    • 日志输出被设计为线程安全的方式,并支持 异步输出缓冲输出 模式;
    • 支持多种操作系统(RT-Thread、UCOS、Linux、Windows…),也支持裸机平台;
    • 日志支持 RAW格式 ,支持 hexdump
    • 支持按 标签级别关键词 进行动态过滤;
    • 各级别日志支持不同颜色显示;
    • 扩展性强,支持以插件形式扩展新功能。

    名词解释:

    • 1、RAW格式:未经过格式化的原始日志。
    • 2、标签:在软件中可以按照文件、模块、功能等方面,对需要打印的日志设定标签,实现日志分类。

    1.2 插件

    • 1、Flash:使用 EasyFlash 库提供的Flash操作接口,无需文件系统,直接将日志存储在 Flash 中。
    • 2、File:支持文件转档、文件循环保存等与文件日志输出相关功能。
    • 3、敬请期待……

    1.3 Star & Fork

    后续我还会提供更多插件。也非常欢迎大家设计、开发更多实用插件和功能,一起来完善 EasyLogger (Github|OSChina|Coding) 。如果觉得这个开源项目很赞,可以点击项目主页 右上角的 Star ,同时把它推荐给更多有需要的朋友。

    2. 使用

    2.1 参数配置

    EasyLogger 拥有过滤方式、输出格式、输出开关这些属性。

    • 过滤方式支持按照标签、级别、关键词进行过滤;
    • 可以动态的开启/关闭日志的输出;
    • 可设定动态和静态的输出级别
      • 静态:一级开关,通过宏定义,在编译阶段使用;
      • 动态:二级开关,通过API接口,在运行阶段使用。

    注:目前参数配置及输出方式都是单例模式,即全局只支持一种配置方式。此模式下,软件会较为简单,但是无法支持复杂的输出方式。

    2.2 输出级别

    参考 Android Logcat ,级别最高为 0(Assert) ,最低为 5(Verbose) 。

    0.[A]:断言(Assert)
    1.[E]:错误(Error)
    2.[W]:警告(Warn)
    3.[I]:信息(Info)
    4.[D]:调试(Debug)
    5.[V]:详细(Verbose)
    

    2.2.1 输出缤纷多彩的日志

    各个级别日志默认颜色效果如下。用户也可以根据自己的喜好,在 elog_cfg.h 对各个级别日志的颜色及字体风格进行单独设置。

    TextColor

    2.3 输出过滤

    支持按照 级别、标签及关键词 进行过滤。日志内容较多时,使用过滤功能可以更快定位日志,保证日志的可读性。更多的过滤功能设置方法及细节请阅读\docs\zh\api\kernel.md文档

    注:RAW格式、hexdump 格式日志不支持标签、关键词过滤

    2.4 输出格式

    输出格式支持:级别、时间、标签、进程信息、线程信息、文件路径、行号、方法名。每种优先级别可以独立设置输出格式。

    2.5 输出方式

    通过用户的移植,可以支持任何一种输出方式。只不过对于某种输出方式可能引入的新功能,需要通过插件实现,例如:文件转存,检索Flash日志等等。后期会有更多的插件开源出来。下面简单对比下部分输出方式使用场景:

    • 终端:方便用户动态查看,不具有存储功能;
    • 文件与Flash:都具有存储功能,用户可以查看历史日志。但是文件方式需要文件系统的支持,而Flash方式更加适合应用在无文件系统的小型嵌入式设备中。

    2.6 Demo

    2.6.1 核心功能

    下图为在终端中输入命令来控制日志的输出及过滤器的设置,更加直观的展示了 EasyLogger 核心功能。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9Dfqk5E0-1614481257126)(https://raw.githubusercontent.com/armink/EasyLogger/master/docs/zh/images/EasyLoggerDemo.gif)]

    2.6.2 Flash Log(将日志保存到 Flash 中)

    下图过程为通过控制台输出日志,并将输出的日志存储到 Flash 中。重启再读取上次保存的日志,最后清空 Flash 日志。

    FlashLog

    2.6.2 File Log(将日志保存到文件中)

    通过 FIle 插件,可以将日志自动保存至文件中。每个文件可以设定大小,超过规定大小后,自动新建新的文件来存储日志。

    3. 文档

    具体内容参考\docs\zh\下的文件。务必保证在 阅读文档 后再移植使用。

    4. 后期

    • Flash存储:在EasyFlash中增加日志存储、读取功能,让EasyLogger与其无缝对接。使日志可以更加容易的存储在 非文件系统 中,并具有历史日志检索的功能;
    • 配置文件:文件系统下的配置文件;
    • 文件转档:文件系统下支持文件按容量转档,按时间区分;
    • 日志助手:开发跨平台的日志助手,兼容Linux、Windows、Mac系统,打开助手即可查看、过滤(支持正则表达式)、排序、保存日志等。前端:HTML5 + Bootstrap + AngularJS + NW.js,后端:Rust + iron + rust-websocket + serial-rs
    • 异步输出:目前日志输出与用户代码之间是同步的方式,这种方式虽然软件简单,也不存在日志覆盖的问题。但在输出速度较低的平台下,会由于增加日志功能,而降低软件运行速度。所以后期会增加 异步输出 方式,关键字过滤也可以放到异步输出中去;
    • Arduino:增加Arduino lib,并提供其Demo;

    5. 许可

    MIT Copyright © armink.ztl@gmail.com

    源码下载

    这个源码是我调整后的:
    https://gitee.com/fensnote/EasyLogger.

    微信公众号:fensnote

    展开全文
  • EasyLogger(https://github.com/armink/EasyLogger)是一款超轻量级...相比log4c、zlog这些知名的C日志库,EasyLogger的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插件形式进行动态扩展。
  • 文章目录日志简述EasyLogger简介编译运行附录EasyLogger说明1. 介绍1.1 主要特性1.2 插件1.3 Star & Fork2. 使用2.1 参数配置2.2 输出级别2.2.1 输出缤纷多彩的日志2.3 输出过滤2.4 输出格式2.5 输出方式2.6 ...
  • Easylogger快速移植配置

    2020-06-02 23:59:30
    Easylogger快速移植配置效果移植过程添加必须的文件到工程填充修改接口文件修改配置文件测试代码 效果 移植过程 添加必须的文件到工程 填充修改接口文件 elog_port.c /* * This file is part of the EasyLogger ...
  • 文章目录1. EasyLogger目录结构分析2.... EasyLogger之源码分析3.1 源码分析值头文件分析3.1.1 elog.h(EasyLogger核心函数头文件)3.1.2 elog_cfg.h(EasyLogger配置函数头文件)3.1.3 elog_port.c(对应
  • EasyLogger使用教程

    2021-10-15 09:52:26
    int main(void) { ... /* initialize EasyLogger */ elog_init(); /* set EasyLogger log format */ elog_set_fmt(ELOG_LVL_ASSERT, ELOG_FMT_ALL); elog_set_fmt(ELOG_LVL_ERROR, ELOG_FMT_LVL...
  • EasyLogger是对智能
  • 概述 嵌入式也能像纯软开发那样输出级别,方便查找Bug,有了这个神器可以...相比 log4c、zlog 这些知名的 C/C++ 日志库, EasyLogger 的功能更加简单,提供给用户的接口更少,但上手会很快,更多实用功能支持以插...
  • 04、W601之移植EasyLogger

    2021-08-10 18:24:00
    04、W601之移植EasyLogger 1、 介绍 EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog ...
  • EasyLogger elog; char log_buf[ELOG_LINE_BUF_SIZE] = {0}; char * level_output_info[6] = { [ELOG_LVL_ASSERT] = "A/", [ELOG_LVL_ERROR] = "E/", [ELOG_LVL_WARN] = "W/", [ELOG_LVL_INFO] = "I/", [ELOG_LVL_...
  • EasyLogger.zip

    2021-04-14 11:29:48
    该工程是极简美开源打印文件日志输出神器,逻辑开发Demo。对应的博文:https://blog.csdn.net/qq_36075612/article/details/115689907?spm=1001.2014.3001.5501
  • (PS : 这个需要终端支持,也是便于用户查看和分析 ) 4、EasyLogger实现思路 上一节我们大体了解了一下EasyLogger的特点,其功能还是非常丰富的,该日志库的实现相对比较简单,大体思路我画了张图,大家带着这个思路...
  • EasyLogger快速移植

    千次阅读 2019-10-22 10:56:33
    回到GIT的主分支 下载源码 解压在这里...D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KING\KEIL\Middlewares\Third_Party\EasyLogger-master 文件夹说明 D:\GKOSON_BACK_GARDEN\TOUCH_CLASS\TOUCH-KIN...
  • 移植EasyLogger

    千次阅读 2019-04-14 12:33:05
    1\elog\EasyLogger整个文件夹拿走 放到工程下面\STM32USARTMODE\Middlewares\Third_Party\easylogger 2加入头文件路径:\STM32USARTMODE\Middlewares\Third_Party\easylogger\inc 3建立文件夹elog 加入文件 需要2个...
  • EasyLogger 1. 介绍 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, ...
  • 二、EasyLogger介绍 EasyLogger 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/...
  • EasyLogger1. 介绍 是一款超轻量级(ROM<1.6K, RAM<0.3K)、高性能的 C/C++ 日志库,非常适合对资源敏感的软件项目,例如: IoT 产品、可穿戴设备、智能家居等等。相比 log4c、zlog 这些知名的 C/C++ 日志库, ...
  • 1、写在最前:开源日志库EasyLogger使用c语言编写,及其简便和通用,感谢EasyLogger作者armink的贡献。2、代码地址:github地址:https://github.com/armink/EasyLoggergitee地址: ...
  • easyLogger中文乱码

    2020-06-29 14:26:24
    产生原因:编码格式问题,使用UTF-8编码源文件就不会有这个问题。 解决方案1: 使用notepad++打开乱码文件,在菜单栏选择编码,选择转为UTF-8编码。再次编译文件就没有乱码问题了

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 381
精华内容 152
关键字:

EasyLogger

友情链接: STM32:Usart1.rar