日志文件实时存储

简介: 初始化:1、open文件2、write 1M空数据到文件3、mmap文件,ptr作为写指针4、关闭文件   #include #include #include #include #include #include #include #include #include ...

初始化:
1、open文件
2、write 1M空数据到文件
3、mmap文件,ptr作为写指针
4、关闭文件

 

 

 

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/mman.h>



#define XLOG_MAX_FILE_SIZE  32*1024

char *xlog_write_ptr = NULL;
int xlog_write_size = 0;
int xlog_fd = -1;

int inner_id = 0;
char xlog_path_name[128] = "/home/derek";

int xlog_set_path_name(char *path_name)
{
    if(strlen(path_name) > 64 || path_name == NULL) return 1;

    sprintf(xlog_path_name, "%s", path_name);
        
    return 0;
}

int xlog_file_restore(int mid)
{
    int fd;
    char file_name[128];
    char *temp_buff;

    //flush to file
    if ( xlog_write_ptr != NULL) munmap(xlog_write_ptr, XLOG_MAX_FILE_SIZE);
    
    sprintf(file_name, "%s/xlog%d.%d.txt", xlog_path_name, mid, inner_id++);
    
    fd = open(file_name, O_RDWR|O_CREAT);
    if(fd < 0) {
        printf("open: %s\n", strerror(errno));
        return 1;
    }

    temp_buff = malloc(XLOG_MAX_FILE_SIZE);
    if (temp_buff == NULL) {
        printf("malloc: %s\n", strerror(errno));
        return 1;
    }

    memset(temp_buff, 0, XLOG_MAX_FILE_SIZE);
    write(fd, temp_buff, XLOG_MAX_FILE_SIZE);
    free(temp_buff);

    xlog_write_ptr = mmap(0, XLOG_MAX_FILE_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);  
    if (xlog_write_ptr == (char *)-1) {
        printf("mmap: %s\n", strerror(errno));
        return 1;
    }
    printf("xlog_write_ptr=0x%x\n", xlog_write_ptr);
    xlog_write_size = 0;

    close(fd);
    return 0;
}



int xlog_buffer(int mid, char *buffer)
{
    char log_info[128];
    int str_len = strlen(buffer);
    
    if ( (xlog_write_size + str_len > XLOG_MAX_FILE_SIZE) || (xlog_write_ptr == 0) )
    {
        if ( xlog_file_restore(mid) < 0) 
            return 1;
    }

    // write to buffer
    sprintf(xlog_write_ptr + xlog_write_size, "%s", buffer);
    xlog_write_size += str_len;
    
    return 0;
}

int main()
{
    int i;
    char log_info[128];
    
    for(i = 0; i < 100000; i++) {
        sprintf(log_info, "hello, %d\n", i);
        xlog_buffer(1, log_info);
        //sleep(1);
    }
    
    return 0;
}

 

相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
目录
相关文章
|
3月前
|
存储 监控 算法
防止员工泄密软件中文件访问日志管理的 Go 语言 B + 树算法
B+树凭借高效范围查询与稳定插入删除性能,为防止员工泄密软件提供高响应、可追溯的日志管理方案,显著提升海量文件操作日志的存储与检索效率。
140 2
|
9月前
|
存储 运维 监控
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
SelectDB 实现日志高效存储与实时分析,完成任务可领取积分、餐具套装/水杯/帆布包!
|
8月前
|
存储 数据可视化 开发工具
【Application Insights】Application Insights存储的Function App的日志存在"Operation Link" 为空的情况
在将 Azure Functions 升级到 .NET 8 和 Isolated Worker 模式后,Application Insights 的请求日志中 `operation_Link` 字段为空,导致分布式追踪无法正常关联。解决方法包括:确保引用正确的 SDK 包(如 `Microsoft.Azure.Functions.Worker.ApplicationInsights`),正确配置 Application Insights 服务,移除默认日志过滤规则,并使用最新依赖包以支持分布式追踪。通过这些步骤,可恢复端到端事务视图的可视化效果。
187 11
|
11月前
|
运维 应用服务中间件 nginx
docker运维查看指定应用log文件位置和名称
通过本文的方法,您可以更高效地管理和查看Docker容器中的日志文件,确保应用运行状态可控和可监测。
1808 28
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
394 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
320 1
【赵渝强老师】Oracle的控制文件与归档日志文件
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的运行日志文件
PostgreSQL的物理存储结构包括数据文件、日志文件等。运行日志默认未开启,需配置`postgresql.conf`文件中的相关参数如`log_destination`、`log_directory`等,以记录数据库状态、错误信息等。示例配置中启用了CSV格式日志,便于管理和分析。通过创建表操作,可查看生成的日志文件,了解具体日志内容。
401 3
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
225 4
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
303 1
|
SQL 数据库
为什么 SQL 日志文件很大,我应该如何处理?
为什么 SQL 日志文件很大,我应该如何处理?