【Linux】项目日志——输出重定向

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【Linux】项目日志——输出重定向

项目日志——输出重定向

前言

在通常情况下,Linux/UNIX每个程序在开始运行的时候,都会自动打开三个标准stream(流),分别为标准输入流stdin(文件描述符0),标准输出流stdout(文件描述符1),标准错误输出流stderr(文件描述符2)。

Linux的本质就是一切皆文件,输入输出设备也是以文件形式存在和管理的。

  • stderr是不缓存的,stdout则进行行间缓存,即遇到\n才打印输出。示例如下:
#include <stdio.h>
#include <unistd.h>

int main(int argc, char** argv)
{
    for(int i = 0; i < 5; i++){
        fprintf(stdout, "This is stdout[%d]", i);
        sleep(1);
        
    }
    fprintf(stdout,"\n");//stdout
    sleep(1);

    for(int i = 0; i < 5; i++){
        fprintf(stderr, "This is stderr[%d]", i);
        sleep(1);
    } 
    sleep(60);
    return 0;
}
  • 可以发现,第一个循环(stdout)的内容会被一次性打印出来,第二个循环(stderr)的内容会一个一个的打印出来。

重定向

  • 有时我们使用printf来打印调试信息,但是如果终端关掉,我们就无法查看到信息了。
  • 所以需要我们保存在文件中,以便永久保存。

>

  • 将标准输出重定向到文件
./test > test.txt
  • 将标准输入和标准出错重定向到文件
./test 1 > testout.txt ./test 2 > testerr.txt

>>

  • 以附加方式重定向到文件
  • 例如:将标准输入和标准出错以追加的方式重定向到文件中
./test > test1.txt 2>&1

代码中实现重定向操作

#include <stdio.h>
int main(void){
    FILE *out = freopen("stdout.txt", "w", stdout);
    printf("%s\n", "redirect test");
    return 0;
}
  • 通常在生产环境下,会将stdin,stdout,stderr这三个流重定向到其他文件。
  • 日志中最好加上日期、时间、文件等信息。
  • printf涉及到文件,可能会引起IO中断(会进行一系列的系统调用),因此执行printf比一般指令的效率要低很多。一般情况下不建议用printf。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 监控 安全
在Linux中,如何进行日志审计?
在Linux中,如何进行日志审计?
|
2月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
2月前
|
开发框架 .NET Docker
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
【Azure 应用服务】App Service .NET Core项目在Program.cs中自定义添加的logger.LogInformation,部署到App Service上后日志不显示Log Stream中的问题
|
2月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
2月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
2月前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
|
2月前
|
Linux Python
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
【Azure 应用服务】Azure App Service For Linux 上实现 Python Flask Web Socket 项目 Http/Https
|
2月前
|
Java Linux C++
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
【Azure 应用服务】App Service For Linux 部署Java Spring Boot应用后,查看日志文件时的疑惑
|
2月前
|
存储 Linux 网络安全
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
【Azure 应用服务】App Service For Linux 如何在 Web 应用实例上住抓取网络日志
|
2月前
|
存储 关系型数据库 Linux
【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php
【Azure 应用服务】App Service For Linux 部署PHP Laravel 项目,如何修改首页路径为 wwwroot\public\index.php
下一篇
无影云桌面