【已解决】go语言中实现输出日志内容到log文件

【背景】

折腾:

【记录】用go语言实现模拟登陆百度

期间,已经实现:

【记录】用go实现基本http方面的抓取网页html

但是是print到cmd中的。

现在想要输出内容到log文件中。

【折腾过程】

1.参考官网:

Package log

去加上:

import "log"

2.参考:

Go语言的日志记录功能

去试试。

3.对于输出的log文件,想要实现以当前文件名为名,即:

当前是

EmulateLoginBaidu.go

希望log文件是:

EmulateLoginBaidu.log

所以要去:

【已解决】go语言中实现获得当前文件的文件名

4.已经解决了,获得当前文件名的问题,接下来,是希望把相关的代码,单独弄成对应的独立的函数里面去:

【记录】go语言中把代码移至独立的函数中:搞懂go语言中函数的写法

5.然后再继续去,使用log,生成log文件,输出内容到log文件:

先再去看看 os.OpenFile 的语法:

func OpenFile

然后再去看看对应的:

type FileMode

然后去试试代码,结果出错:

【已解决】go语言编译出错:syntax error: unexpected :, expecting := or = or comma

6.然后又出现“exit status 1”的错误:

【已解决】go代码出错退出:exit status 1

 

【总结】

最终,成功实现了log输出文件,到对应的log文件:

package main

import (
    "fmt"
    "log"
    "os"
    //"io/ioutil"
    //"net/http"
    "runtime"
    "path"
    "strings"
)

// GetCurFilename
// Get current file name, without suffix
func GetCurFilename() string {
    _, fulleFilename, _, _ := runtime.Caller(0)
    //fmt.Println(fulleFilename)
    var filenameWithSuffix string
    filenameWithSuffix = path.Base(fulleFilename)
    //fmt.Println("filenameWithSuffix=", filenameWithSuffix)
    var fileSuffix string
    fileSuffix = path.Ext(filenameWithSuffix)
    //fmt.Println("fileSuffix=", fileSuffix)
    
    var filenameOnly string
    filenameOnly = strings.TrimSuffix(filenameWithSuffix, fileSuffix)
    //fmt.Println("filenameOnly=", filenameOnly)
    
    return filenameOnly
}

func main() {
    fmt.Printf("this is EmulateLoginBaidu.go\n")
    
    var filenameOnly string
    filenameOnly = GetCurFilename()
    fmt.Println("filenameOnly=", filenameOnly)
    
    var logFilename string =  filenameOnly + ".log";
    fmt.Println("logFilename=", logFilename)
    logFile, err := os.OpenFile(logFilename, os.O_RDWR | os.O_CREATE, 0777)
    if err != nil {
        fmt.Printf("open file error=%s\r\n", err.Error())
        os.Exit(-1)
    }

    defer logFile.Close()
    //logger:=log.New(logFile,"\r\n", log.Ldate | log.Ltime | log.Llongfile)
    logger:=log.New(logFile,"\r\n", log.Ldate | log.Ltime | log.Lshortfile)
    logger.Println("normal log 1")
    logger.Println("normal log 2")
}

输出的内容,如下:

D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu>go run EmulateLoginBaidu.go
this is EmulateLoginBaidu.go
filenameOnly= EmulateLoginBaidu
logFilename= EmulateLoginBaidu.log

如图:

go code log normal logFilename EmulateLoginBaidu log

对应log文件:

D:\tmp\tmp_dev_root\go\src\github.com\user\EmulateLoginBaidu\EmulateLoginBaidu.log

的内容为:

2013/09/18 17:18:18 EmulateLoginBaidu.go:71: normal log 1

2013/09/18 17:18:18 EmulateLoginBaidu.go:72: normal log 2

至此,基本搞定。

 

注意:

不要轻易用Fatal或Panic:

【已解决】go代码出错退出:exit status 1



发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量