Skip to content
/ dlog Public

在spdlog上封装一层,C风格导出函数,目的是实现C#和C++共用的调用一个日志模块

Notifications You must be signed in to change notification settings

daixian/dlog

Folders and files

NameName
Last commit message
Last commit date

Latest commit

1811c05 · May 20, 2024
Dec 26, 2021
Apr 10, 2021
Jul 31, 2020
May 20, 2024
May 20, 2024
Aug 21, 2019
May 14, 2021
Apr 2, 2019
May 20, 2024
Mar 23, 2020
Aug 21, 2020
May 20, 2024
Mar 23, 2020
Dec 28, 2019
Mar 16, 2020
Jul 31, 2020
Mar 16, 2020
Feb 25, 2021
Jul 31, 2020
May 20, 2024
Apr 10, 2021
Apr 19, 2021
Dec 26, 2021
Dec 26, 2021
Nov 9, 2019
Apr 26, 2019
May 20, 2024
Nov 9, 2019

Repository files navigation

Build Status

记录

  1. 目前已经换成了conan的构建和包管理。
  2. 内部从glog换成的spdlog。
  3. 完全去掉了boost,换成了Poco库。
  4. 使用conan的CI已经完成 -> Release下载(x64,x86)
  5. 随便的加了个日志的加密接口。

编译库的方法

  1. 使用pip安装conan构建工具:
    pip install conan -U
    conan remote add conan-center https://conan.bintray.com
    conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan
  2. clone该项目的主分支。
  3. 在终端中执行项目根目录下的build.bat脚本即可,如果网速过慢的话,我目前的解决方法是给上面两个服务器搭反向代理,编译完成后可以在conan的文件夹中或者项目根目录下的/temp/archive中看到编译结果如下:
    dx@DESKTOP-IFNRFQ6:/mnt/d/Work/dlog$ tree ./temp/
    ./temp/
    └── archive
        └── dlog
            ├── Windows_Visual Studio16_x86_64_MD
            │   ├── bin
            │   │   └── dlog.dll
            │   ├── include
            │   │   └── dlog
            │   │       └── dlog.h
            │   └── lib
            │       └── dlog.lib
            ├── Windows_Visual Studio16_x86_64_MT
            │   ├── bin
            │   │   └── dlog.dll
            │   ├── include
            │   │   └── dlog
            │   │       └── dlog.h
            │   └── lib
            │       └── dlog.lib
            ├── Windows_Visual Studio16_x86_MD
            │   ├── bin
            │   │   └── dlog.dll
            │   ├── include
            │   │   └── dlog
            │   │       └── dlog.h
            │   └── lib
            │       └── dlog.lib
            └── Windows_Visual Studio16_x86_MT
                ├── bin
                │   └── dlog.dll
                ├── include
                │   └── dlog
                │       └── dlog.h
                └── lib
                    └── dlog.lib
    
    22 directories, 12 files

NDK

C++使用示例

  1. 首先强烈建议整个日志系统使用UTF8的编码。
  2. 整个库只引用一个dlog.h头文件即可,在头文件上方写一个宏定义DLOG_UTF8,这是为了设置vs编译器编译代码字符串成UTF8。
  3. 使用LogI这样的函数进行输出即可,格式化控制符和C言语的printf完全一致。
    #define DLOG_UTF8
    #include "dlog/dlog.h"
    
    //在初始化之前进行一些准备设置
    dlog_set_is_use_utf8_bom(true);
    dlog_memory_log_enable(false);
    dlog_console_log_enable(false);
    
    //执行初始化
    int res = dlog_init("log", "speed", dlog_init_relative::MODULE);
    //判断初始化是否成功
    ASSERT_TRUE(dlog_is_initialized());
    
    for (size_t i = 0; i < 100; i++) {
        LogI("试试❀❀❀❀❀❀❀❀❀,%d",i);
    }
    dlog_flush();
    
    //...
    
    dlog_close();

C#使用示例

1、下面是C#工程里的初始化,C#的封装使用Dlog.cs文件。初始化使用一个文件夹路径,然后会在这个文件夹里新建一个日志文件,目前会自动删除3天前的数量在50个以上的日志文件。第二个参数为你的程序名,会用来给日志文件命名,所以不要使用一些特殊符号。默认是warning等级的日志会立即flush,可以在最初的时候设置了debug级别以上的日志都立即flush,防止有的程序一启动就异常崩溃退出导致没有日志写进文件=。=

//初始化日志文件在 %APPDATA%/FViewTool/log 文件夹,日志文件名形如"FViewTool.20190317-214418.log"
DLog.Init("FViewTool\\log", "FViewTool", DLog.INIT_RELATIVE.APPDATA, false);

//设置立即flush的等级为debug
DLog.SetFlushOn(DLog.LOG_THR.debug);

//输出一条日志,立即flush了
DLog.LogI("App Start!");

//或者直接调用flush也可以...
DLog.Flush();

2、日志分为文件、控制台、内存分别独立的三路日志。通常后台工作时可以关闭控制台日志和内存日志。有的时候如果发现日志性能极低,那么有可能是stdout被重定向到了某个看不见控制台,可以尝试关闭控制台输出。通常频繁的日志不能输出到控制台。

//设置只有err级别的日志才输出到控制台
DLog.SetConsoleThr(DLog.LOG_THR.err);

//设置只有err级别的日志才写到文件
DLog.SetFileThr(DLog.LOG_THR.err);

//禁用控制台输出日志,这个函数最好放在init之前执行
 DLog.ConsoleLogEnable(false);

3、内存日志是一个暂存在内存里的日志文本队列,用于c#把c++端写的日志从内存队列里获取出来,然后显示到c#的UI界面等等。c#部分提取内存日志只能从内存队列里一条一条提取。如果提取不到日志则dlog_get_memlog()函数返回0,可以定时提取一批然后显示到UI上.

//设置使能内存日志(默认是不使能的)
DLog.MemoryLogEnable(true);

//提取一批内存日志,可以见GetMemorylog()函数的实现
List<string> logs = DLog.GetMemorylogs();

老版本conan的python环境

python -m venv .venv

.\.venv\Scripts\Activate.ps1
# 确认环境激活后执行下面的
pip install -r requirements.txt

About

在spdlog上封装一层,C风格导出函数,目的是实现C#和C++共用的调用一个日志模块

Resources

Stars

Watchers

Forks

Packages

No packages published