如何使用log4c日志库,测试例子程序

如何使用log4c日志库,测试例子程序,第1张

系统:ubuntu12.10 .

准备:

安装log4c库, sudo apt-get install liblog4c-dev liblog4c-doc

别的系统请百度/GOOGLE找相关编译安装当。log4c官网:http://log4c.sourceforge.net/index.html

文件:

log.h log.c 自己将log4c重新封装的函数

test-log.c 测试用的主函数

log4crc 配置文件(xml,照着写就行)

//log.h

[cpp] view plain copy

#ifndef _LOG_H_

#define _LOG_H_

#include <string.h>

#include <stdlib.h>

#ifdef __cplusplus

extern "C"

{

#endif

#include "log4c.h"

#ifdef __cplusplus

}

#endif

#define LOG_PRI_ERROR LOG4C_PRIORITY_ERROR

#define LOG_PRI_WARNLOG4C_PRIORITY_WARN

#define LOG_PRI_NOTICE LOG4C_PRIORITY_NOTICE

#define LOG_PRI_DEBUG LOG4C_PRIORITY_DEBUG

#define LOG_PRI_TRACE LOG4C_PRIORITY_TRACE

extern int log_open(const char *category)

extern void log_message(int priority ,const char* fmt, ...)

extern void log_trace(const char *file , int line , const char *func, const char *fmt ,...)

extern int log_close()

#define LOG_ERROR(fmt , args...)\

log_message(LOG_PRI_ERROR, fmt, ##args)

#define LOG_WARN(fmt, args...) \

log_message(LOG_PRI_WARN, fmt , ##args)

#define LOG_NOTICE(fmt , args...) \

log_message(LOG_PRI_NOTICE, fmt , ##args)

#define LOG_DEBUG(fmt , args...)\

log_message(LOG_PRI_DEBUG, fmt , ##args)

#define LOG_TRACE(fmt,args...) \

log_trace(__FILE__ , __LINE__ , __FUNCTION__ , fmt ,## args)

#endif

//log.c

[cpp] view plain copy

#include <log4c.h>

#include <assert.h>

#include "log.h"

static log4c_category_t *log_category = NULL

int log_open(const char *category)

{

if (log4c_init() == 1)

{

return -1

}

log_category = log4c_category_get(category)

return 0

}

void log_message(int priority , const char *fmt , ...)

{

va_list ap

assert(log_category != NULL)

va_start(ap, fmt)

log4c_category_vlog(log_category , priority , fmt , ap)

va_end(ap)

}

void log_trace(const char *file, int line, const char *fun,

const char *fmt , ...)

{

char new_fmt[2048]

const char *head_fmt = "[file:%s, line:%d, function:%s]"

va_list ap

int n

assert(log_category != NULL)

n = sprintf(new_fmt, head_fmt , file , line , fun)

strcat(new_fmt + n , fmt)

va_start(ap , fmt)

log4c_category_vlog(log_category , LOG4C_PRIORITY_TRACE, new_fmt , ap)

va_end(ap)

}

int log_close()

{

return (log4c_fini())

}

//test-log.c

[cpp] view plain copy

#include <stdio.h>

#include "log.h"

int main(void)

{

log_open("<span style="color: rgb(51, 51, 51)line-height: 20px">mycat</span>")

LOG_TRACE("trace")

LOG_ERROR("error")

LOG_WARN("warn")

LOG_NOTICE("notice")

LOG_DEBUG("hello log4c!")

log_close()

return 0

}

//配置文件,默认名为log4crc

[html] view plain copy

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE log4c SYSTEM "">

<log4c version="1.2.1">

<config>

<bufsize>0</bufsize>

<debug level="2"/>

<nocleanup>0</nocleanup>

<reread>1</reread>

</config>

<!-- root category ========================================= -->

<category name="root" priority="notice"/>

<category name="mycat" priority="debug" appender="stdout"/>

<!-- default appenders ===================================== -->

<appender name="stdout" type="stream" layout="basic"/>

<appender name="stderr" type="stream" layout="dated"/>

<appender name="syslog" type="syslog" layout="basic"/>

<!-- default layouts ======================================= -->

<layout name="basic" type="basic"/>

<layout name="dated" type="dated"/>

</log4c>

编译命令:

[python] view plain copy

gcc test-log.c log.c -o test-log -llog4c

运行效果

./test-log

[stdout] TRACEmycat - [file:test-log.c, line:7, function:main]trace

[stdout] ERRORmycat - error

[stdout] WARN mycat - warn

[stdout] NOTICE mycat - notice

[stdout] DEBUGmycat - hello log4c!

包含设备日志,堆栈跟踪和其他诊断信息,可帮助您查找和修复应用中的错误。

安卓bugreport主要用于分析手机的状态。其包含: main log , kernel log ,cpuinfo等信息。bugreport是一个可执行文件,编译后的路径为system/bin/bugreport,源码位于framework/native/cmds/bugreport。其核心在于启动dumpsys服务。bugreport同dumpstate服务建立socket通信(建立连接20次,超时3min无数据等容错)。连接之后,将接收到的数据定向到文件中。

  因此我们看到的bugreport数据均来自dumpstate。

bugreport通过socket与dumpstate服务建立通信,在dumpstate.cpp中的dumpstate()方法完成核心功能。分别输出: current log、 last log、 vm trace、 dumpsys、 system info

 其详细内容主要有: 系统build及运行时长等信息、 内存和CPU进程的信息、 kernel log、 system log、 radio log、 event log 等等。实际来说,bugreport中显示的大部分为信息,都有对应的命令方式可以获取。bugreport只是作为一个在不打扰用户的前提下执行的一套命令集合。

    1). main_log    记录手机android上层app以及framework相关活动的log,比如你写的app打印的log,就在这里面

    2). events_log    主要是ActivityManager、powerManager等相关的log

    3). kernel Log    驱动相关的log

Logcat是内置在Android系统中的一个可执行工具,用于转储系统消息日志,其中包括设备引发错误时的堆栈追踪以及从您的应用当使用 Log 类编写的消息。可以在主机上通过adb logcat命令来查看模拟机上日志信息。

Android tcpdump是命令行数据包捕获实用程序。它可以捕获来自您的Wi-Fi连接,蜂窝连接以及您在android设备上可能具有的任何其他网络连接的数据包

modem 是手机里负责搜网和sim卡数据 *** 作底层模块,每个手机都有,md log 用于分析掉网、掉话、无信号等问题

系统崩溃时留下的遗言,怎么死的,死哪了,死的多惨。

当一个动态库(native 程序)开始执行时,系统会注册一些连接到 debuggerd 的 signal handlers,当系统 crash(崩溃) 的时候,会保存一个 tombstone 文件到/data/tombstones目录下(Logcat中也会有相应的信息),文件的确就像墓碑一样记录了死亡了的进程的基本信息(例如进程的进程号,线程号),死亡的地址(在哪个地址上发生了 Crash),死亡时的现场是什么样的(记录了一系列的堆栈调用信息)等等。

6. netlog    网络相关

看网络链接情况,抓取网络包等等

7. QXDM(the Qualcomm eXtensible Diagnostic Monitor)高通可扩展诊断监视器

该工具适用于拥有使用Qualcomm ASIC和试用硬件的设备的人,并允许他们测试,评估和潜在诊断其移动设备的RF性能问题。通常使用它来促进这些设备的产品开发。

使用该软件,用户可以查看他们的移动设备发出的所有信令消息,因为该软件会生成它们的日志。这些日志也可以通过软件进行注释。可以将网络和电话参数的任何混合添加到屏幕,并且允许用户在使用其参数时使用复杂的公式。该程序还实时生成大量统计数据,以便用户可以更好地识别潜在的性能问题。用户可以访问Markov统计信息,Mux统计信息,RLP统计信息,块错误率,移动性管理数据,寻呼和访问统计信息,前向和反向链路统计信息等等。该程序还为用户提供了便携式设备信号的图形显示。该程序与Windows *** 作系统兼容。

8. init Log(init进程log)

9. Crashlog(崩溃日志)

是要调用对数函数求值吗

这个嘛,你可以现在源文件开头处加一个数学库函数头(#include<math.h>),,

然后就可以在你需要调用的位置直接的使用,例如

int a=100;

int b;

b=log(a);

printf(“%d”,b);


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7965799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-12
下一篇 2023-04-12

发表评论

登录后才能评论

评论列表(0条)

保存