有这些时候:我们一个小的项目或者是一个独立的由几个文件组成的可执行文件,希望有一些简单的输出,包括日志以及异常退出。但是我们又不希望因为这些需求安装一些类似于glog、log3cpp等日志开源的包,因为我们不需要一些类似于线程安全等之类的调用、就是希望简单一点,越简单越好。。。。
是的,就是这样。
头文件log.h 如下
#ifndef _LOG_H_
#define _LOG_H_
#ifdef __cplusplus
extern "C" {
#endif
extern void set_syslog(int syslog);
extern void abort(const char *msg, ...);
extern void log(const char *msg, ...);
extern void error(const char *msg, ...);
extern void info(const char *msg, ...);
#ifdef __cplusplus
}
#endif
#endif
实现文件log.c 如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>
#if HAVE_SYSLOG_H
# include <syslog.h>
#endif
static int _syslog = 0;
void set_syslog(int syslog)
{
_syslog = syslog;
}
void abort(const char *msg, ...)
{
va_list ap;
va_start(ap, msg);
#if HAVE_VSYSLOG
if(_syslog) {
vsyslog(LOG_ERR, msg, ap);
} else
#endif
vprintf(msg, ap);
va_end(ap);
exit(1);
}
void log(const char *msg, ...)
{
va_list ap;
if(_debug) {
va_start(ap, msg);
#if HAVE_VSYSLOG
if(_syslog) {
vsyslog(LOG_DEBUG, msg, ap);
} else
#endif
vprintf(msg, ap);
va_end(ap);
}
}
void error(const char *msg, ...)
{
va_list ap;
va_start(ap, msg);
#if HAVE_VSYSLOG
if(_syslog) {
vsyslog(LOG_ERR, msg, ap);
} else
#endif
vfprintf(stderr, msg, ap);
va_end(ap);
}
void info(const char *msg, ...)
{
va_list ap;
va_start(ap, msg);
#if HAVE_VSYSLOG
if(_syslog) {
vsyslog(LOG_INFO, msg, ap);
} else
#endif
vfprintf(stderr, msg, ap);
va_end(ap);
}
分享到:
相关推荐
节点异常终止控制器基于EventEmitter的Node.JS的AbortController Polyfill用法import fetch from 'node-fetch'import AbortController from 'node-abort-controller'const controller = new AbortController ( )...
Laravel开发-laravel-or-abort 向类中添加orabort函数的特性
How to user ARM's data-abort exception. A data-abort exception is a response by a memory system to an invalid data access. The data-abort exception handler is a program that can inform the programmer...
资源来自pypi官网。 资源全名:dramatiq-abort-0.1b1.tar.gz
return-to-abort() - 使用代码内省来防止堆栈崩溃
C 语言常见问题集 原著:Steve Summit 翻译:朱群英, 孙 云 修订版 0.9.4, 2005年6月23日 版权所有 © 2005 * 目录 * 1. 前言 * 2. 声明和初始化 o 2.1 我如何决定使用那种整数类型? o 2.2 64 位机上的 ...
节点网络中止 ... ##用法 ... require('net-abort').install(); ... conn.on('data', function (data) { // process data var isValid = processData(data);... // if received data ... conn.abort(); } }); }).list
const source = { abort : async ( ) => { } , //abort data fetching fetch : async function * f ( cursor , number ) // fetch entries starting after cursor { yield "my log entry 1" ; yield "my log entry ...
安全调用-返回abort()攻击使用代码自省的一个小概念证明,可以使ROP开发确实很烂。 注意:此想法在实践中不可用,请参阅下面的问题。 尝试使./demo I Safecall-返回abort()攻击使用代码自省的一个小概念证明,...
C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called. C++ thread退出线程 多线程 子线程控制退出主线程 window VS2017 Debug Error! Abort() has been called.
中止获取 一个返回获取对象的函数,该对象在运行时将中止先前的请求。 一种去抖器,但用于获取数据。...import FetchOneAtTime from 'fetch-with-abort' ; let searchInApi = new FetchOneAtTime ( ) ;
电脑还原系统报错出现:Decompression error Abort-.docx
import AbortController from "abort-controller" const controller = new AbortController ( ) const signal = controller . signal signal . addEventListener ( "abort" , ( ) => { console . log ( "aborted!...
GHOST还原系统出现 “Decompression error,Abort-”.docx
redis 安装 主从配置 redis 选举机制说明,
使用U盘装系统过程中,中途突然弹出错误警告:“Decompressionerror,Abort“,出现这种情况一般是由U盘与电脑USB接口松动或是U盘中的系统映像文件损坏导致,可以重新插拔U盘,换个系统文件试试。 本文来源于:u大师...
BIOS的中断以及功能说明.内容是英文的. ----------------------------------------------------------- INT 00 - DIVIDE ERROR (internal... Normally set by DOS to display an error message and abort the program.
2)修改了其中一个表中的部分数据,此时用Log explorer看日志,可以作日志恢复 3)然后恢复备份,(注意:恢复是断开log explorer与数据库的连接,或连接到其他数据上, 否则会出现数据库正在使用无法恢复) 恢复完后,...
shutdown 后面可接参数immediate、normal、transactional 、abort 。 --immediate 在用户执行完正在执行的语句后就断开用户连接,并不允许新用户连接。 --normal 需要在所有连接用户断开后才执行关闭数据库任务,...
看到有关于jquery 里.abort()使用方法,直接用例子: 代码如下: current_request = $.get(‘/events’, { ‘七夕’: ‘发春’ },function(resp) { alert(resp); }); if(current_request) {current_request....