在实际应用中,日志是一个比较重要的部分。在unix下用得比较多的是syslog之类的机制。但是我感觉不是很方便,于是编写了下面这个日志函数库。支持分级,同时支持不重启应用而开关日志。
/*
logc.c
by towerjt
*/
#include <logc.h>
static char log_config_path[64];
static char current_date[11];
static char current_time[9];
static const char* const priorities[PRIORITY_NUM] = {
"FATAL",
"ERROR",
"WARN",
"INFO",
"DEBUG"
};
static void getConfig(char *subject)
{
char *p;
memset(log_config_path,0,sizeof(log_config_path));
if ( ( p = getenv("XLOG_CONFIG_PATH") ))
strncpy(log_config_path,p,sizeof(log_config_path));
else
strcpy(log_config_path,DEFAULT_CONFIG);
}
static void getTime()
{
struct tm* m;
time_t g_t;
g_t = time(NULL);
m = localtime(&g_t);
sprintf(current_date,"%d-%02d-%02d",
m->tm_year+1900,
m->tm_mon+1,
m->tm_mday
);
sprintf(current_time,"%02d:%02d:%02d",
m->tm_hour,
m->tm_min,
m->tm_sec
);
}
static int getPriority(char *subject,int p_level)
{
struct stat buf;
char p_name[128];
snprintf(p_name, sizeof(p_name), "%s/%s.%s",
log_config_path,
subject,
priorities[p_level-1]);
return stat(p_name, &buf);
}
void logc_out(char *subject,int priority_level,char *fmt,...)
{
int i;
FILE *f1;
char fname[128];
va_list args;
getConfig(subject);
getTime();
if ( ! getPriority(subject,priority_level) )
{
sprintf(fname,"%s/%s_%s_%s.log",log_config_path,
subject,
priorities[priority_level-1],
current_date);
f1 = fopen(fname,"a");
if (f1)
{
fprintf(f1,"[%d]%s %s @ ",getpid(),current_date,current_time);
va_start(args, fmt);
vfprintf(f1,fmt,args);
va_end(args);
fclose(f1);
}
}
}
/*
logc.c
by towerjt
*/
#ifndef __logc__
#define __logc__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#define DEFAULT_CONFIG "/work02/log"
#define PRIORITY_NUM 5
#define P_FATAL 1
#define P_ERROR 2
#define P_WARN 3
#define P_INFO 4
#define P_DEBUG 5
void logc_out(char *subject,int priority_level,char *fmt,...);
#endif
分享到:
相关推荐
首先,纯C语言的日志函数库提供了一个轻量级且高效的方式来进行日志记录。C语言是编程的基础,它的语法简洁,运行效率高,因此用C编写的日志库特别适合嵌入式系统和资源有限的环境。这样的函数包通常包含一系列的API...
“logc语言”可能是作者为这个C语言日志库起的一个简称,可能包含一系列与日志记录相关的函数和结构体,比如log_init()用于初始化日志系统,log_info()、log_error()等用于记录不同级别的信息。 “日志系统”是指...
为了进一步利用这个日志库,开发者需要了解如何在自己的C项目中引入和配置它,如何调用日志函数,以及如何根据需要调整日志级别和输出设置。同时,了解其内部工作原理可以帮助优化日志处理性能,例如,通过缓存日志...
本篇将详细介绍如何使用C语言实现一个高效且功能丰富的日志功能,其中包括参数化写入、定时保存、容量限制触发保存以及动态库的高效性实现。 首先,`参数化写入日志信息`类似于`fprint`和`printf`函数,这意味着...
4. **同步与异步**:日志打印可能涉及多线程环境,同步日志确保在同一时刻只有一个线程写入,可以使用互斥锁`mutex`来实现。而异步日志则将日志放入队列,由单独的线程处理,提高性能但可能会丢失部分日志。 5. **...
总的来说,ccufl库作为一个通用的C函数库,其目标是提供一套全面、可靠的工具集,使开发者能够专注于解决问题的核心逻辑,而不是重复编写基础功能的代码。它通过封装和优化常见操作,降低了开发复杂度,提高了代码的...
"C LOG 日志生成函数"是一个关于如何在C语言编程环境中创建自定义日志记录功能的主题。这篇博客文章可能详细解释了如何设计和实现一个高效的日志系统。 首先,我们要理解日志的基本概念。日志是一系列记录信息的...
在日志记录的场景中,创建一个专门的日志线程可以避免因为频繁写入日志而阻塞主线程,确保主业务流程的流畅性。 接着,日志等级是日志记录中不可或缺的部分。通常,我们会定义如DEBUG、INFO、WARNING、ERROR和FATAL...
"log的c实现"这个主题关注的是如何在C语言环境中实现一个日志系统。C语言作为一种底层、高效的编程语言,虽然没有内置的日志功能,但可以通过自定义函数来实现。 在描述中提到的博客链接,虽然内容没有给出,但我们...
回到压缩包中的`logc.c`文件,这很可能是一个简单的C++日志模块实现。虽然我们没有具体的代码内容,但可以推测这个文件可能包含了一些基本的日志记录功能,如设置日志级别、记录日志信息到文件或控制台等。 总的来...
首先,`log.dll` 是一个动态链接库,它包含预编译的函数和代码,用于实现日志功能。当程序运行时,会加载这个库来调用其中的日志输出函数。动态链接库的好处是,多个程序可以共享同一份库文件,节省内存资源。同时,...
本话题主要关注如何使用VB(Visual Basic)编程语言,结合记事本应用程序,来实现一个简单的操作日志系统。以下是关于这个主题的详细讲解。 首先,我们需要理解VB中的文件操作。在VB中,可以使用`FileSystemObject`...
综上所述,《Linux下C语言函数库参考手册》不仅是一本详尽的函数手册,更是一部深入理解Linux系统特性的宝典。通过学习和实践这些函数,开发者可以充分挖掘C语言在Linux平台上的潜力,构建出更加高效、稳定和安全的...
### 官方GNU C函数库手册:全面解析与深度解读 #### 引言:官方GNU C函数库手册概览 官方GNU C函数库手册是一部详尽的指南,它覆盖了GNU C库(glibc)的所有功能,是C语言开发者的重要参考资料。这份手册由Sandra ...
本项目提供了一个用C语言编写的日志库,它具备日志回收、跨平台兼容性、日志分级以及线程安全等特性,使得开发者在不同环境下能够有效地管理和分析程序的运行状态。 首先,日志库的核心功能是记录日志,它通常包含...
C++作为一种强大的系统级编程语言,没有内置的日志处理功能,因此程序员通常需要依赖第三方库或者自定义解决方案来实现日志记录。在这个场景下,你分享的开源项目就是一种自定义的日志记录库,它简化了在C++项目中...
C++作为一门强大的系统级编程语言,拥有丰富的日志库供选择,其中`spdlog`是一个高效、易用的日志框架,而本篇将介绍如何对其进行封装,以便在MFC(Microsoft Foundation Classes)应用程序中更便捷地使用。...
在实际使用这个日志系统时,每个线程在需要记录事件时,都会调用日志函数。这个函数会先尝试获取线程锁,然后写入日志,最后释放锁。如果在写入过程中发生错误,如磁盘满或权限问题,程序应当有适当的错误处理机制,...
总结来说,`libutils-c-master`是一个全面的C语言实用函数库,它涵盖了字符串处理、数据结构、错误处理、日志记录、文件操作、网络通信、线程进程管理和数学运算等多个方面,大大提升了C语言开发的便捷性和效率。...
描述中提到的“c日志,使用规则:直接包含到项目中,并且在属性配置-》链接->输入中添加DbgHelp.lib”,这暗示了我们可能正在处理一个依赖于Windows Debug Helper库(DbgHelp.lib)的日志库。DbgHelp库通常用于提供...