LOG重定向

通过LOG进行debug是常用方法,但存在LOG过多刷屏或显示不完整的问题。针对此,可考虑将log输入到文件中,以解决这些困扰。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过LOG 来debug是比较常用的一种debug方法,但是有时候LOG 太多,会刷屏,或者LOG刷出来不完整

这时候可以考虑将log 输入到文件中

#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>

static FILE* output = NULL;

#define MAX_STMT_LEN 512

static char dbg_stmt[MAX_STMT_LEN];

static void PrintLogToFile (const char* fmt,...)
{
    struct timeval current_time;
    va_list v_arg;
    if (output == NULL)
    {
        output = fopen("mylog.log","a+");
    }
    if (output == NULL)
    {
        return;
    }
    gettimeofday (&current_time,NULL);
    va_start (v_arg,fmt);
    vsnprintf(dbg_stmt,MAX_STMT_LEN,fmt,v_arg);
    fprintf(output,"[%lu.%03lu S]: %s ",current_time.tv_sec,current_time.tv_usec/1000,dbg_stmt);
    va_end(v_arg);
    fflush(output);//可能会影响performance
    return;
}


int main()
{
    int i = 0;
    PrintLogToFile("hello,just test %d\n",i);
    return 0;
}

 

### RK3588 平台上的日志重定向方法及配置 #### 准备工作 为了在 RK3588 上实现日志重定向,需确保具备如下条件: - **RK3588 设备**:可使用实际开发板或模拟环境。 - **交叉编译工具链**:用于编译必要的组件和支持库。 - **Linux 系统**:作为主机操作系统来准备所需资源和脚本。 - **SD 卡 或 eMMC 存储设备**:用作启动盘或其他持久化存储介质[^1]。 #### 实现日志重定向的方法 ##### 方法一:通过命令行操作 可以直接利用 Linux 的标准输入/输出重定向功能,在终端执行命令时指定日志文件路径。例如,要捕获某个服务的日志并保存至特定位置而不影响屏幕显示,则可以这样做: ```bash service_name start > /path/to/logfile.log 2>&1 & ``` 这里 `>` 符号表示将标准输出流写入到指定文件;`2>&1` 表示把错误信息也一起追加进去;最后面跟上 `&` 可让进程后台运行[^3]。 ##### 方法二:修改系统配置文件 对于希望长期生效的日志设置,可以通过编辑 `/etc/rsyslog.conf` 文件来进行全局调整。找到对应的服务条目,并添加或更改其目标地址为所需的日志文件名。这通常适用于那些由 rsyslogd 处理的应用程序和服务产生的消息记录。 另外还可以创建自定义规则集以便更灵活地控制不同类型的事件流向何处被记录下来。比如针对 SSH 登录尝试失败的情况专门建立一条规则指向另一个独立的日志文档中去。 ##### 方法三:借助虚拟文件系统 (VFS) 考虑到某些特殊场景下可能需要临时性的解决方案而不想改动太多现有结构的话,那么就可以考虑采用 VFS 方案了。由于它本身即位于内存之中所以读取速度非常快而且不会占用额外磁盘空间[^4]。具体做法是在 `/sys/kernel/debug/tracing` 下新建一个名为 trace_pipe 的节点用来收集追踪数据然后将其映射给用户态应用程序从而达到实时监控目的的同时又能方便快捷地导出结果供进一步分析处理之用。 #### Python 脚本实例展示自动化的日志管理流程 下面给出一段简单的Python代码片段演示如何自动化完成上述提到的一些基本任务: ```python import os from subprocess import Popen, PIPE def redirect_logs(service, log_path): with open(log_path,'w') as f: process = Popen(['sudo', 'systemctl','start', service], stdout=f, stderr=PIPE) _, err = process.communicate() if process.returncode != 0: raise Exception(f"Failed to start {service}: {err.decode()}") if __name__ == "__main__": try: redirect_logs('sshd.service', '/var/log/sshd_custom.log') print("Log redirection successful.") except Exception as e: print(e) ``` 这段代码实现了对 sshd 服务启动过程中的所有输出都导向到了一个新的日志文件里边去了,同时保持原有的正常运作不受干扰。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值