linux下的日志编写

server/2024/9/22 21:58:21/

 1、日志初始化创建

 2、日志写入

 3、日志关闭

log.c

#include "log.h"static log_t LOG;//初始化日志文件,在当前目录创建日志文件
int log_init(char *pdirname)
{time_t t;struct tm *ptm = NULL;char filepath[64] = {0};int ret = 0;time(&t);ptm = localtime(&t);ret = access(pdirname, F_OK);if (0 != ret){mkdir(pdirname, 0777);}sprintf(filepath, "%s/log_%4d%02d%02d", pdirname, ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday);LOG.flog = fopen(filepath, "a");if (NULL == LOG.flog){fprintf(stderr, "logfile open faileed, can not record software information");return -1;}LOG.curtime = ptm;pthread_mutex_init(&LOG.lock, NULL);return 0;
}//写入日志文件
int log_write(LEVEL_T level,const char *pfile, const int line, const char *pfunc, const char *pstr, ...)
{time_t t;struct tm *ptm = NULL;char tmpinfo[1024] = {0};va_list pnext;pthread_mutex_lock(&LOG.lock);if (level < LOG.curlevel){pthread_mutex_unlock(&LOG.lock);return 0;}va_start(pnext, pstr);time(&t);ptm = localtime(&t);if (ptm->tm_year != LOG.curtime->tm_year | ptm->tm_mon != LOG.curtime->tm_mon | ptm->tm_mday != LOG.curtime->tm_mday){   pthread_mutex_unlock(&LOG.lock);log_deinit();log_init("LOG_FILE");pthread_mutex_lock(&LOG.lock);LOG.curtime = ptm;}sprintf(tmpinfo, "%s\n", pstr);fprintf(LOG.flog, "[%4d-%02d-%02d %02d-%02d-%02d] [%s %d %s] ", ptm->tm_year+1900, ptm->tm_mon+1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, pfile, line, pfunc);vfprintf(LOG.flog, tmpinfo, pnext);va_end(pnext);pthread_mutex_unlock(&LOG.lock);return 0;
}//销毁日志文件
int log_deinit(void)
{//关闭日志文件if (NULL != LOG.flog){pthread_mutex_lock(&LOG.lock);fclose(LOG.flog);LOG.flog = NULL;pthread_mutex_unlock(&LOG.lock);pthread_mutex_destroy(&LOG.lock);}return 0;
}//设置日志级别
void log_setlevel(LEVEL_T level)
{LOG.curlevel = level;return;
}

log.h

#ifndef __LOG_H__
#define __LOG_H__#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <unistd.h>
#include <stdarg.h>
#include <pthread.h>typedef struct LOG_DATE 
{int year;int mon;int day;
}DATE_T;typedef enum LOG_LEVEL
{LOG_MASSAGE,LOG_WORNING,LOG_ERROR,
}LEVEL_T;typedef struct log
{FILE *flog;LEVEL_T curlevel;struct tm *curtime;  pthread_mutex_t lock;
}log_t;extern int log_init(char *pdirname);
extern int log_write(LEVEL_T level,const char *pfile, const int line, const char *pfunc, const char *pstr, ...);
extern int log_deinit(void);#endif

main.c

#include "log.h"int main(void)
{int num = 11451;log_init("LOG_FILE");log_write(LOG_MASSAGE, __FILE__,__LINE__,__func__, "===================================================");log_write(LOG_MASSAGE, __FILE__,__LINE__,__func__, "             software log record systerm           ");log_write(LOG_MASSAGE, __FILE__,__LINE__,__func__, "===================================================");log_write(LOG_MASSAGE, __FILE__,__LINE__,__func__, "hello world %d", num);log_write(LOG_MASSAGE, __FILE__,__LINE__,__func__, "hello world %d", num);log_deinit();return 0;
}

效果:


http://www.ppmy.cn/server/120482.html

相关文章

Qt:懒汉单例(附带单例使用和内存管理)

前言 本文主要写懒汉单例以及单例的释放&#xff0c;网上很多教程只有单例的创建&#xff0c;但是并没有告诉我们单例的内存管理&#xff0c;这就很头疼。 正文 以下是两种懒汉单例的写法 1. 懒汉式单例&#xff08;多线程不安全&#xff0c;但是在单线程里面是安全的&…

pytorch实现RNN网络

目录 1.导包 2. 加载本地文本数据 3.构建循环神经网络层 4.初始化隐藏状态state 5.创建随机的数据&#xff0c;检测一下代码是否能正常运行 6. 构建一个完整的循环神经网络 7.模型训练 8.个人知识点理解 1.导包 import torch from torch import nn from torch.nn imp…

如何将生物序列tokenization为token?

文章目录 原理讲解&#xff1a;代码实现&#xff1a;利用k-mer技术把核苷酸或氨基酸序列tokenization成token输入文件和结果文件&#xff1a; 原理讲解&#xff1a; tokenization是自然语言处理领域非常成熟的一项技术&#xff0c;tokenization就是把我们研究的语言转换成计算…

macOS平台(intel)编译MAVSDK安卓平台SO库

1.下载MAVSDK: git clone https://github.com/mavlink/MAVSDK.git --recursive 2.编译liblzma 修改CMakeLists.txt文件增加C与CXX指令-fPIC set(CMAKE_C_FLAGS "-fPIC ${CMAKE_C_FLAGS}") set(CMAKE_CXX_FLAGS "-fPIC ${CMAKE_CXX_FLAGS}") 修改如下:…

算法题目复习(0909-0917)

1. 连续子序列和 pdd的算法题&#xff0c;根本不记得怎么做 给一个数组&#xff0c;有正数和负数&#xff0c;算出连续子序列的和最大为多少 int maxSubArraySum(vector<int>& nums) {int maxSoFar nums[0];int maxEndingHere nums[0];for (size_t i 1; i <…

Ubuntu 22.04.5 LTS 发布下载 - 现代化的企业与开源 Linux

Ubuntu 22.04.5 LTS (Jammy Jellyfish) - 现代化的企业与开源 Linux Ubuntu 22.04.5 发布&#xff0c;配备 Linux 内核 6.8 请访问原文链接&#xff1a;https://sysin.org/blog/ubuntu-2204/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xf…

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】007 - 一号内核线程 kernel_init线程 工作流程分析

【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】007 - 一号内核线程 kernel_init线程 工作流程分析 系列文章汇总:《鸿蒙OH-v5.0源码分析之 Uboot+Kernel 部分】000 - 文章链接汇总》 本文链接:《【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】007 - 一号内核线程 kernel_init线…

nginx_单机平滑升级

#!/bin/bash# 定义要下载的 Nginx 源码包的 URL 和保存路径 nginx_tar"http://nginx.org/download/nginx-1.19.0.tar.gz" nginx_tar_file"/tmp/nginx-1.19.0.tar.gz" nginx_version"nginx-1.19.0" nginx_path$(which nginx) # 获取 Nginx 的路径…