有这些时候:我们一个小的项目或者是一个独立的由几个文件组成的可执行文件,希望有一些简单的输出,包括日志以及异常退出。但是我们又不希望因为这些需求安装一些类似于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函数的特性
NX二次开发UF_ABORT_enable_abort 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士...
NX二次开发UF_ABORT_disable_abort 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士...
NX二次开发UF_ABORT_clear_abort 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业人士,...
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
NX二次开发UF_CLONE_ask_validation_abort_option 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等...
NX二次开发UF_ABORT_ask_flag_status 函数介绍,Ufun提供了一系列丰富的 API 函数,可以帮助用户实现自动化、定制化和扩展 NX 软件的功能。无论您是从事机械设计、制造、模具设计、逆向工程、CAE 分析等领域的专业...
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()攻击使用代码自省的一个小概念证明,...
电脑还原系统报错出现:Decompression error Abort-.docx 本文档主要讲述了电脑还原系统报错出现 Decompression error Abort 的解决方法。该问题发生在还原系统镜像文件快完成的时候,出现 Decompression error ...
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 ( ) ;
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 选举机制说明,