golang 输出重定向:fmt Log,子进程Log,第三方库logrus

独立 fmt Log输出重定向

golang的fmt包的输出函数 Println、Printf、PrintStack等,默认将打印输出到os.Stdout、错误打印输出到os.Stderr,os.Stdout 和 os.Stderr 默认值 /dev/stdout /dev/stderr 设备。

//代码摘自:golang封装包 -> /lib/golang/src/os
var (
        Stdin  = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
        Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
        Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
)

改变 os.Stdout 和 os.Stderr 值将输出重定向。
下面代码将fmt输出重定向到/home/fmt.log文件:

    f, _ := os.OpenFile("/home/fmt.log", os.O_WRONLY|os.O_CREATE|os.O_SYNC|os.O_APPEND,0755)
    os.Stdout = f
    os.Stderr = f

golang 第三方包:logrusLog输出重定向

logrus Log 默认输出到 os.Stderr

 func New() *Logger {
    return &Logger{
        Out:       os.Stderr,
        Formatter: new(TextFormatter),
        Hooks:     make(LevelHooks),
        Level:     InfoLevel,
    }
}

logrus提供封装方法重定向输出流:SetOutput
下面代码将fmt输出重定向到/home/fmt.log文件:

import (
  "github.com/Sirupsen/logrus"
)
    f, _ := os.OpenFile("/home/fmt.log", os.O_WRONLY|os.O_CREATE|os.O_SYNC|os.O_APPEND,0755)
    logrus.SetOutput(f)

子进程输出从定向

上面两种方法都是在程序内部加入代码,改变进程输出重定向输出流。在linux shell 中我们可以使用 > 符号或者 >> 重定向标准输出。在golang语言中,可使用 os/exec 封装函数启动子进程,并可使用相关设置重定向子进程的标准输出(影响 fmt 和 logrus 的默认设置)。

下面代码将fmt输出重定向到/home/exec.log文件;

    cmd := exec.Command(binary_name, args...)
    f, _ := os.OpenFile("/home/exec.log", os.O_WRONLY|os.O_CREATE|os.O_SYNC,0755)
    cmd.Stdout = f
    cmd.Stderr = f

你可能感兴趣的:(golang)