日志文件实时存储

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 初始化: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;
}

 

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
16天前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
125 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
16天前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
16天前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
2月前
|
监控 Linux 应用服务中间件
系统监控:使用日志文件 journalctl的使用
本文介绍了如何使用`journalctl`命令来监控和查看Linux系统的日志文件,包括查看特定行数、过滤日志级别、实时跟踪日志、按时间段查询日志以及日志轮换和压缩的配置。
51 2
系统监控:使用日志文件 journalctl的使用
|
2月前
|
SQL 数据库
为什么 SQL 日志文件很大,我应该如何处理?
为什么 SQL 日志文件很大,我应该如何处理?
|
2月前
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
39 4
|
2月前
|
存储 消息中间件 大数据
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
41 1
|
2月前
|
存储 消息中间件 大数据
大数据-68 Kafka 高级特性 物理存储 日志存储概述
大数据-68 Kafka 高级特性 物理存储 日志存储概述
28 1
|
2月前
|
开发工具 git
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
git显示开发日志+WinSW——将.exe文件注册为服务的一个工具+图床PicGo+kubeconfig 多个集群配置 如何切换
39 1
|
2月前
|
存储 监控 固态存储
如何监控和优化 WAL 日志文件的存储空间使用?
如何监控和优化 WAL 日志文件的存储空间使用?

热门文章

最新文章

下一篇
无影云桌面