返回顶部
首页 > 资讯 > 精选 >将日志写入终端和文件
  • 471
分享到

将日志写入终端和文件

2024-02-09 12:02:46 471人浏览 泡泡鱼
摘要

PHP小编香蕉在这篇文章中将要介绍的是如何将日志写入终端和文件。在开发过程中,日志是非常重要的,它可以帮助我们追踪和调试代码的问题。将日志写入终端和文件是常见的两种方式,它们各有优劣,

PHP小编香蕉在这篇文章中将要介绍的是如何将日志写入终端和文件。在开发过程中,日志是非常重要的,它可以帮助我们追踪和调试代码的问题。将日志写入终端和文件是常见的两种方式,它们各有优劣,可以根据具体需求选择合适的方式。接下来,我们将详细讨论如何使用php代码将日志写入终端和文件,并介绍一些常用的日志写入函数和技巧,帮助开发者更好地进行日志管理。

问题内容

我有这个函数可以将日志写入终端和日志文件:


// Run an executable and print its log in real-time and print its log into a file too.
func RunWithLog(pthExe string, arg []string, fLog *os.File, dir string) error {
    cmd := exec.Command(pthExe, arg...)
    if dir != "" {
        cmd.Dir = dir
    }

    stdout, err := cmd.StdoutPipe()
    if err != nil {
        return err
    }
    stderr, err := cmd.StderrPipe()
    if err != nil {
        return err
    }

    var wg sync.WaitGroup
    wg.Add(4)

    Go streamRealTime(stdout, &wg)
    go streamRealTime(stderr, &wg)

    go streamToLogFile(stdout, fLog, &wg)
    go streamToLogFile(stderr, fLog, &wg)

    err = cmd.Start()
    if err != nil {
        return err
    }

    wg.Wait()

    err = cmd.Wait()
    return err
}

func streamRealTime(output io.ReadCloser, wg *sync.WaitGroup) {
    defer wg.Done()
    scanner := bufio.NewScanner(output)
    scanner.Split(bufio.ScanRunes)
    for scanner.Scan() {
        fmt.Print(scanner.Text())
    }
    err := scanner.Err()
    if err != nil {
        log.Printf("error: write log to terminal: %s", err.Error())
    }
}

func streamToLogFile(output io.ReadCloser, fLog *os.File, wg *sync.WaitGroup) {
    defer wg.Done()
    scanner := bufio.NewScanner(output)
    scanner.Split(bufio.ScanRunes)
    for scanner.Scan() {
        _, err := fLog.WriteString(scanner.Text())
        if err != nil {
            log.Printf("error: write log to file: %s", err.Error())
        }
    }
    err := scanner.Err()
    if err != nil {
        log.Printf("error: write log to file: %s", err.Error())
    }
}

上面的函数调用:

    // Log file.
    fLog, err := os.OpenFile(pathLog, os.O_APPEND, os.ModeAppend)
    if err != nil {
        return err
    }
    defer fLog.Close()

    err = RunWithLog(pathExe, []string{"-b"}, fLog, workDir)
    // ...

问题

问题是有些日志行打印到终端,有些行打印到文件,如下所示:

问题

如何确保所有日志行都打印到终端和文件?

解决方法

日志通过以下方式打印到终端和文件:


// Run an executable and print its log real-time and print its log into a file too.
func RunWithLog(pthExe string, arg []string, fLog *os.File, dir string) error {
    cmd := exec.Command(pthExe, arg...)
    if dir != "" {
        cmd.Dir = dir
    }

    stdout, err := cmd.StdoutPipe()
    if err != nil {
        return err
    }
    stderr, err := cmd.StderrPipe()
    if err != nil {
        return err
    }

    var wg sync.WaitGroup
    wg.Add(2)

    go streamLogs(stdout, fLog, &wg)
    go streamLogs(stderr, fLog, &wg)

    err = cmd.Start()
    if err != nil {
        return err
    }

    wg.Wait()

    err = cmd.Wait()
    return err
}

// Stream logs to both terminal and a file.
func streamLogs(output io.ReadCloser, fLog *os.File, wg *sync.WaitGroup) {
    defer wg.Done()
    scanner := bufio.NewScanner(output)
    scanner.Split(bufio.ScanRunes)
    for scanner.Scan() {
        // Stream to terminal:
        fmt.Print(scanner.Text())
        // Stream to a file:
        _, err := fLog.WriteString(scanner.Text())
        if err != nil {
            log.Printf("error: write log to file: %s", err.Error())
        }
    }
    err := scanner.Err()
    if err != nil {
        log.Printf("error: write log to terminal: %s", err.Error())
    }
}

测试

日志是相同的:

以上就是将日志写入终端和文件的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 将日志写入终端和文件

本文链接: https://lsjlt.com/news/562519.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 将日志写入终端和文件
    php小编香蕉在这篇文章中将要介绍的是如何将日志写入终端和文件。在开发过程中,日志是非常重要的,它可以帮助我们追踪和调试代码的问题。将日志写入终端和文件是常见的两种方式,它们各有优劣,...
    99+
    2024-02-09
  • go语言日志实现详解(打印日志、日志写入文件和日志切割)
    目录Go语言内置的log包实现了简单的日志服务Logger标准logger的配置配置日志前缀(SetPrefix)配置日志输出位置创建新logger对象日志库级别runtime.Ca...
    99+
    2024-04-02
  • Python + logging输出到屏幕,将log日志写入到文件
    logging提供了一组便利的函数,用来做简单的日志。它们是 debug()、 info()、 warning()、 error() 和 critical()。 logging函数根据它们用来跟踪的事件的级别或严重程度来命名。标准级别及其适...
    99+
    2023-10-06
    python 软件测试 程序员 接口测试 自动化测试 测试工程师
  • 怎么将日志信息写入Linux系统日志
    本篇文章为大家展示了怎么将日志信息写入Linux系统日志,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。下面给大家讲解将日志信息写入系统日志/var/log/messages中以及和它的参数:sysl...
    99+
    2023-06-17
  • 怎么将日志文件和二进制文件快速导入HDFS
    这篇文章主要讲解了“怎么将日志文件和二进制文件快速导入HDFS”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么将日志文件和二进制文件快速导入HDFS”吧!首选数据移动方法如果在旧版Hado...
    99+
    2023-06-02
  • Qt5实现qDebug日志信息写入日志文件过程
    目录1、思路2、代码3、问题4、结果与扩展思路1、思路 其实Qt提供了将日志写入文件的方式,是以接口的形式提供的,我们只需要按照我们的需求完成回调函数和我们自己的接口即可。 为方便调...
    99+
    2024-04-02
  • 在 PHP 中写入错误日志文件
    当我们有一个在生产模式下运行的大型 Web 应用程序时,我们需要监控用户可能面临的所有错误或潜在错误。密切关注所有可能的错误的最佳方法是在出现错误时将它们记录到文件中。 本文将介绍内置函数 erro...
    99+
    2024-02-27
  • 在Linux终端动态查看mysql日志文件的方法
    这篇文章将为大家详细讲解有关在Linux终端动态查看mysql日志文件的方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在Linux终端动态查看mysql日志文件的方法...
    99+
    2024-04-02
  • flutter开发实战-日志logger写入文件及print
    flutter开发实战-日志logger写入文件及print 在开发中,需要日志logger写入文件,方便日后查看出现的问题。这里记录之前的实现方案。 使用的日志插件是logger 一、引入日志插件...
    99+
    2023-09-14
    flutter Logger 日志
  • Linux如何查看日志文件写入的速度
    今天小编给大家分享一下Linux如何查看日志文件写入的速度的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。使用dd首先要介绍的...
    99+
    2023-07-02
  • 将syslog ng日志写入MySQL(远程)数据库
    Centos6.5syslog-ng 3.25mysql1,yum install syslog-ng.x86_64 2,yum install mysql.x86_64  &...
    99+
    2024-04-02
  • mysql将bin-log日志文件转为sql文件
    查看mysqlbinlog版本 mysqlbinlog -V [--version] 查看binlog日志开启状态 show variables like "%log_bin%"; mysql打开bin-log日志后,m...
    99+
    2020-03-02
    mysql将bin-log日志文件转为sql文件
  • AndroidStudio中Logcat写入和查看日志
    目录使用 Logcat如何打开 Logcat?Logcat 级别在 Logcat 中制作自定义级别自定义日志消息字体颜色和样式如何清除日志总结使用 Logcat Logcat是日常开...
    99+
    2024-04-02
  • Python: 将TXT文件写入MySQL
    当前环境: Windwos 10 Python 2.7 MySQL 5.5 PyCharm 遇到的问题 ImportError: No module named MySQLdb安装MySQLdb,...
    99+
    2024-04-02
  • Python: 将TXT文件写入MySQ
    当前环境: Windwos 10 Python 2.7 MySQL 5.5 PyCharm 遇到的问题 ImportError: No module named MySQLdb安装MySQLdb, 注意是windows命令符下,不...
    99+
    2023-01-31
    文件 Python TXT
  • 怎么在phpmyadmin中使用日志文件写入数据
    今天就跟大家聊聊有关怎么在phpmyadmin中使用日志文件写入数据,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。前提:root权限,已经进入了ph...
    99+
    2024-04-02
  • 如何解决Laravel日志文件写入失败问题
    这篇文章将为大家详细讲解有关如何解决Laravel日志文件写入失败问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在讲这个问题之前可能需要简单介绍下Linux系统下的文件的Ownership和Permi...
    99+
    2023-06-04
  • 使用java如何实现异步将日志写到文件中
    本篇文章给大家分享的是有关使用java如何实现异步将日志写到文件中,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。java异步写日志到文件中详解实现代码:package com....
    99+
    2023-05-31
    java 异步 日志
  • logback中怎么显示mybatis查询日志文件并写入
    本文小编为大家详细介绍“logback中怎么显示mybatis查询日志文件并写入”,内容详细,步骤清晰,细节处理妥当,希望这篇“logback中怎么显示mybatis查询日志文件并写入”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一...
    99+
    2023-06-29
  • 解读crontab脚本错误日志和正确的输出写入到文件
    目录crontab脚本错误日志和正确的输出写入到文件不输出内容将正确和错误日志都输出到 /tmp/load.log只输出正确日志到 /tmp/load.log只输出错误日志到 /tmp/load.log名词解释cront...
    99+
    2023-04-07
    crontab日志 crontab脚本错误日志 crontab输出写入到文件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作