mylog

log 打印和分析工具
授权协议 GPL
开发语言 C/C++
所属分类 程序开发、 日志工具(Logging)
软件类型 开源软件
地区 国产
投 递 者 戚晨
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

mylog 是一个多线程安全、高效、易用性很强的 C/C++ 库 .只需要一个初始化日志目录以及文件名,你就可以像使用 printf 一样的去打印日志。通过日志可以定位(多线程)请求 ip, logid,执行时间等。

1 说明
1) 本文件夹包含源码src以及示例文件sample
2) 编译src生成output(包括iånclude和lib)
3) 使用output的lib和include,具体可以查看sample的Makefile和code
4) 日志级别为FATAL, WARNING, NOTICE, TRACE, DEBUG,以此级别变低
5) 使用MY_LOG_FATAL等打印日志,和printf使用方式类似,非常简单。

2 使用API(查看mylog.h)

1) 初始化日志目录

my_log_init(const char* log_path, const char* normal_path, const char* warn_fatal_path, const int log_level)

log_path : log路径 normal_path : 正常日志目录 warn_fatal_path : 异常日志目录 log_level : 日志级别

2) 初始化线程日志数据

my_log_thread_init()

多线程使用

3) 设置一个线程的logid

my_log_set_logid(logid)

必须在my_log_thread_init() 之后使用。

4) 设置一个线程的reqip 

my_log_set_reqip(reqip)

必须在my_log_thread_init() 之后使用.

5) 设置一个线程的reqip

my_log_set_mod(mod)

设置一个线程的reqip, 必须在单线程中使用或者my_log_thread_init() 之后使用.

6)设置计算执行时间的类型(打印时间是ms还是us)

my_log_set_time_type(time_type)

必须在单线程中使用或者my_log_thread_init() 之后使用.

7) 打印FATAL日志

MY_LOG_FATAL(logfmt, arg...)

日记级别 >=1会打印 FATAL日志。

8)打印WARNNING日志

MY_LOG_WARNING(logfmt, arg...)

日记级别 >=2会打印 WARNING日志。

9) 打印NOTICE日志

MY_LOG_NOTICE(logfmt, arg...)

日记级别 >=4会打印 NOTICE日志。

10)打印TRACE日志

MY_LOG_TRACE(logfmt, arg...)

日记级别 >=8会打印TRACE日志。

11) 打印DEBUG日志

MY_LOG_DEBUG(logfmt, arg...)

日记级别 >=16会打印DEBUG日志。

3 范例

1) code

 

#include "mylog.h"


void* test_thread1(void*)
{
    my_log_thread_init();
    my_log_set_reqip("10.10.10.31");
    my_log_set_time_type(TIME_TYPE_MSEC);
    for(int i=0; i<100; i++)
    {
        my_log_set_logid(i);
        MY_LOG_FATAL("thread 1 fatal is at %d, it's %s", i , "OK");
        MY_LOG_WARNNING("thread 1 warning is at %d, it's %s", i , "OK");
        MY_LOG_NOTICE("thread 1 notice is at %d, it's %s", i , "OK");
        MY_LOG_TRACE("thread 1 trace is at %d, it's %s", i , "OK");
        MY_LOG_DEBUG("thread 1 debug is at %d, it's %s", i , "OK");
        sleep(1);
    
    }
}


void* test_thread2(void*)
{
    my_log_thread_init();
    for(int i=0; i<3; i++)
    {
        my_log_set_mod("test2");
        MY_LOG_FATAL("thread 2 fatal is at %d, it's %s", i , "OK");
        MY_LOG_WARNNING("thread 2 warning is at %d, it's %s", i , "OK");
        MY_LOG_NOTICE("thread 2 notice is at %d, it's %s", i , "OK");
        MY_LOG_TRACE("thread 2 trace is at %d, it's %s", i , "OK");
        MY_LOG_DEBUG("thread 2 debug is at %d, it's %s", i , "OK");
        sleep(1);
    }
}


int main()
{
    my_log_init(".", "test.log", "test.log.wf", 16);
    MY_LOG_DEBUG("main begin");


    pthread_t t1, t2;
    pthread_create(&t1, NULL, test_thread1, NULL);
    pthread_create(&t2, NULL, test_thread2, NULL);


    pthread_join(t1, NULL);
    pthread_join(t2, NULL);
    MY_LOG_DEBUG("main end");
}

 

 

 

2)运行结果

  • //将日志写入沙盒mylog.log文件中 -(void)writeLogMessageToLocationFile:(NSString *)logMessagesString isCover:(BOOL)isCover{ // NSDocumentDirectory 要查找的文件 // NSUserDomainMask 代表从用户文件夹下找 // 在iO

  • python module -- mylog ''' logger: save log to file and print to console from mylog import mylog from mylog import debug from mylog import info from mylog import error from mylog import initlog from

  • class MLog { public static $max_size = 2; public static $logfile = 'curr.log'; public static $file_path; public static $dir; public static $bakname; public static $append = 1; public static function w

  • /*  * 支持linux,windows平台,不支持UNICODE  * 用例: #include "mylog.h" #ifdef _WIN32 int tmain(int argc, _TCHAR* argv[]) #else int main(int argc, char* argv[]) #endif {     log_init("1.txt");     //log_init(NUL

  • <?php function mylog($word = '',$var=array(), $log_name='Log', $log_path=ROOT_PATH."data/log/") { $output = "------------------------------------------------------------------------------------------

  • 使用AOP 自动打印方法进出, 耗时 logger   依赖:    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional>

  • <?php /** * Unicode转中文 */ function replace_unicode_escape_sequence($match) { return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE'); } /** * $params 需要输出的数据源 * $file

  • log4cpp日志文件(linux环境) 一.前言 在使用日志系统log4cpp之前,需要配置好log4cpp的包文件,另外注意在编译的时候,也需要加上-llog4cpp -llpthread语句。 log4cpp配置教程1 log4cpp配置教程2 日志文件中的优先级: 在LINUX的SYSLOG中,对日志内容进行分级,将分为8个级别,如下: LOG_EMERG 系统不可用 LOG_ALERT

  • 日志工具类 import android.util.Log; /** * 自定义的log工具类 * Created by Administrator on 2016/1/9 0009. */ public class MyLog { //log日志默认为true 正式上线之后需要改为false private static boolean isOpen = true;

  • #include<stdio.h> #define Log(fmt,...) printf("%s/%d::"fmt"\r\n",__FILE__,__LINE__,##__VA_ARGS__) #define while_safe(bExp) int cnt = 20; while(bExp && (--cnt >0) ? 1 : (Log("dead loop"),0)) int main

  • 在F盘新建  mylog.txt  (大小为0KB) 1.adb remount 2.adb logcat > F:\mylog.txt    3.进行操作后  (可以看到mylog.txt大小有bia) 转载于:https://www.cnblogs.com/summer-mm/p/8260358.html

  • //用MyLog替代NSLog,调试时输出日志,正式发布时自动取消日志输出代码 #ifdef DEBUG #define MyLog(...) NSLog(__VA_ARGS__)//处于开发阶段 #else #define MyLog(...)//处于发布阶段 #endif

  • 数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方 标准输入(stdin):代码为0,使用<或<<; 标准输出(stdout):代码为1,使用>或>>; 没有错误,正常输出的内容 标准错误输出(stderr):代码为2,使用2>或2>> > 覆盖写 >> 追加写 如:下面这行命令 nohup java -jar /root/xxoo/demo*.jar >mylog.log 2

 相关资料
  • 关于分色 为了重现彩色和连续色调图像,印刷商通常将图稿分为四个印版(称为印刷色),分别用于图像的青色、洋红色、黄色和黑色四种原色。还可以包括自定油墨(称为专色)。在这种情况下,要为每种专色分别创建一个印版。当着色恰当并相互套准打印时,这些颜色组合起来就会重现原始图稿。 将图像分成两种或多种颜色的过程称为分色;而用来制作印版的胶片则称为分色片。 用彩色激光打印机打印的复合图像与用照排机打印的四色分色

  •   最后,我们要给绘图程序增加打印和打印预览功能。我们希望文档分两页打印,第一页为封面,打印文档名字。第二页输出文档内容,并在页眉上打印文档名字。虽然AppWizard已经自动生成了打印和打印预览的代码,但是许多情况下,并不能符合要求。 这是因为: 1.打印机和窗口(屏幕)显示的分辨率不同:打印机的分辨率用每英寸多少个点来描述,屏幕分辨率用单位面积的像素点来表示。对于同样的Arial字体下的一个字

  • 问题内容: 要实现如下状态栏: 我希望将此打印到stdout,并保持刷新状态,而不是打印到另一行。这该怎么做? 问题答案: 有一个Python模块,你可以从PyPI将其称为实现这样的功能。如果您不介意添加依赖项,那么这是一个很好的解决方案。否则,请选择其他答案之一。 一个简单的用法示例: 要安装它,可以使用,或者如果您更喜欢pip。

  • 问题内容: 我有一个使用JSON解析过的javascript对象,现在我想打印该对象,以便对其进行调试(该函数出了点问题)。当我执行以下操作时… 我列出了多个[object Object]。我想知道如何打印此内容以查看内容? 问题答案: 大多数调试器控制台都支持直接显示对象。只需使用 根据您的调试器,这很可能会将对象在控制台中显示为折叠的树。您可以打开树并检查对象。

  • 很多团队在使用 Webpack 的时候,不会关注打包后的性能问题,使用webpack-bundle-analyzer可以帮忙排查打包不合理的情况,一般会遇见下面的问题: 打入不必要的包,引入过多的内容,比如lodash,需要使用lodash babel 插件来解决; 打包优先级错误,导致本来不需提前引入的包,可以使用动态加载的方式来引入; 多页面情况下没有拆包,每个页面一个包,这种情况可以使用sp

  • 问题内容: 我正在尝试让Google Chrome浏览器执行分页符。 通过一堆在chrome中有效的网站已经告诉我,但即使有一个非常简单的示例,我似乎也无法使其正常工作。使用chrome打印时,有什么方法可以强制分页? 问题答案: 我已经在包括Chrome在内的所有主要浏览器中成功使用了以下方法: 这是一个简化的示例。在实际代码中,每个页面div包含更多元素。

  • 问题内容: 我是新手,并且在处理非托管CFString(或NSString)的指针时遇到一些困难。我正在一个CoreMIDI项目上工作,这暗示着使用UnsafeMutablePointer?>,如您在此函数中看到的: 我的问题是我想分配一个缓冲区以接收属性(_str)的内容,然后调用上面的函数,最后使用println在控制台中打印内容。 此刻我写了这个: 我没有在苹果开发者库中找到任何示例代码来使

  • 摘要 本文主要介绍 SystemView 可视化分析工具,以及如何在 RT-Thread 上使用它对系统进行调试分析。 简介 随着 MCU 的性能越来越强,嵌入式产品的功能越来越复杂,对于系统的调试和分析提出了新挑战,调试某个功能或问题通常需要花费大量精力,SystemView 是一款帮助用户进行系统调试和分析的强大工具,能够显著缩短开发和调试时间,提高开发效率。本文的目的在于帮助大家在 RT-T