# nlog **Repository Path**: zerokwok/nlog ## Basic Information - **Project Name**: nlog - **Description**: nlog-旨在提供一个高度灵活, 简单易用且速度优良的C++日志模块 - **Primary Language**: C++ - **License**: BSD-2-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 12 - **Forks**: 2 - **Created**: 2018-03-21 - **Last Updated**: 2022-01-28 ## Categories & Tags **Categories**: logging **Tags**: None ## README ## nlog 旨在提供一个高度灵活, 简单易用且速度优良的C++日志模块, 目前应用方向为Windows桌面端应用程序 ## 特性 1. 异步 1. 线程安全 1. 多实例 多个不同的配置产生的实例并输出到不同的文件 1. 灵活 1. 支持配置来指定输出风格 1. 支持配置来指定日志文件大小, 超过自动打印到新文件 1. 支持配置来指定日志文件数量, 超过自动删除最旧的文件 1. 支持C/C++风格混搭输出风格 1. 支持同时使用宽字节, 多字节字符串(遇到多字节宽字节组合时不用再自己转码了) 1. 性能 据不严格的测试,多线程并发写40w条记录到一个文件的时间是1.343秒. 1. 国际化 全程使用Unicode 1. 支持x64 ## 快速上手 ``` #include "nlog.h" //包含头文件, 并连接对应的lib ... _NLOG_ERR("Hello, %s", "nlog") << " Now Time:" << nlog::time; //c,c++风格混搭格式化输出 _NLOG_WAR(L"借用一句话") << " 此后我们的征程便是星辰大海..."; ... _NLOG_SHUTDOWN(); //最后执行清理 ``` ## 组织结构 ``` ./ ├ example - 示例代码目录 ├ include - 外部引用所需的头文件 ├ src - 源文件 ├ msvc08 | ├ nlog.vcproj - vs2005 动态库项目文件 | └ nloglib.vcproj - vs2005 静态库项目文件 └ msvc10 ├ nlog.sln - vs2010 解决方案 ├ nlog.vcproj - vs2010 动态库项目文件 ├ nloglib.vcproj - vs2010 静态库项目文件 └ example ├ 01_simple.vcxproj - 最简单的使用例子(使用动态库) ├ 02_custom_style.vcxproj - 自定义打印风格的例子(使用静态库) ├ 03_multiple_thread.vcxproj - 多线程并发打印同一文件40w日志 └ 04_multiple_instance.vcxproj - 多日志实例不同配置打印4个不同的文件 ``` ## 性能损耗 由于nlog能同时支持多字节, 宽字节字符串这增加了使用的灵活度但作为代价牺牲的是内部转码的性能损耗(如果你追求性能, 可以尽量采用宽字节字符串). ## 更新 1. 2018-08-03 - 更新example 1. 2018-08-03 - 提供动态库, 静态库vs2010与vs2005的项目文件 1. 2018-08-11 - 优化组织结构, 优化性能, 修复静态库中使用导致不稳定的因素 1. 2018-08-11 - 增加多线程, 多实例的example 1. 2019-11-12 - 增加日志输出时大小超过限制后自动分割文件的功能 1. 2019-11-12 - 增加日志输出时文件数量超过限制后自动删除以前文件的功能 1. 2020-03-13 - 适配x64环境并优化了部分代码 ## 未来期望的特性 1. 优化性能 - 在不牺牲特性的情况下, 达到每秒80w条输出 1. 提供动态修改打印配置的途径 - 通过配置文件来设置日志打印风格, 输出目录, 文件名称, 打印等级等一系列设置