Go 如何设置和访问";“全球”;你准备好了吗?

Go 如何设置和访问";“全球”;你准备好了吗?,go,logging,Go,Logging,我确信我遗漏了一些简单的、基本的问题,我是个新手如果我不想使用默认记录器,如何设置记录器以便在函数之间共享它? logissue.go killer.log 我试过这个: import ( "fmt" "github.com/pkg/errors" "log" "os" ) const logfile string = "killer.log" const logprefix string = "LOGTEST: " var DLog *log.Logger

我确信我遗漏了一些简单的、基本的问题,我是个新手如果我不想使用默认记录器,如何设置记录器以便在函数之间共享它?

logissue.go
killer.log
我试过这个:


import (
    "fmt"
    "github.com/pkg/errors"
    "log"
    "os"
)

const logfile string = "killer.log"
const logprefix string = "LOGTEST: "

var DLog *log.Logger
func setupLogger(filename, prefix string) {
    var err error
    out, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        log.Fatal( nil, errors.Wrap(err, "can't open logfile for writing"))
    }
    DLog=log.New(out, prefix, log.LstdFlags)

    fmt.Println("Log object: ",DLog)

}

func uselog() error {
    DLog.Print("Hello") ///// < Here is the issue
    DLog.Print("I have something standard to say")

    fmt.Println("I am done")
    return nil
}

func main() {
    setupLogger(logfile, logprefix)
    DLog.Printf("test from main")
    uselog()
}


进口(
“fmt”
“github.com/pkg/errors”
“日志”
“操作系统”
)
const logfile string=“killer.log”
const logprefix string=“LOGTEST:”
var DLog*log.Logger
func setupLogger(文件名、前缀字符串){
变量错误
out,err:=os.OpenFile(文件名,os.O_APPEND | os.O_CREATE | os.O_WRONLY,0644)
如果错误!=零{
log.Fatal(nil,errors.Wrap(err,“无法打开日志文件进行写入”))
}
DLog=log.New(out,前缀,log.LstdFlags)
fmt.Println(“日志对象:”,DLog)
}
func uselog()错误{
DLog.Print(“Hello”)//问题出在这里
Print(“我有一些标准的话要说”)
fmt.Println(“我完成了”)
归零
}
func main(){
setupLogger(日志文件,日志前缀)
DLog.Printf(“主测试”)
uselog()
}

因此,首先,根据上面的代码,您尝试将非指针记录器与指针记录器设置为不起作用。其次,在设置dlog时使用:=在主方法中创建一个作用域变量,而不是设置全局变量

,因此首先,根据上面的代码,您尝试将非指针记录器设置为指针记录器,但指针记录器不起作用。其次,在设置dlog时使用:=在主方法中创建一个作用域变量,而不是设置全局变量。谢谢,这似乎解决了这个问题!你能把这个写进一个答案里,这样我就可以接受了吗?我已经把它作为一个答案添加到下面了
log.Logger
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x10970b8]

goroutine 1 [running]:
log.(*Logger).Output(0x116dd00, 0x2, 0xc000016106, 0x5, 0x0, 0x0)
    /usr/local/go/src/log/log.go:172 +0x1e8
log.(*Logger).Printf(0x116dd00, 0x10c9202, 0x5, 0x0, 0x0, 0x0)
    /usr/local/go/src/log/log.go:179 +0x7e
main.uselog(0xc000088050, 0x10ca43b)
    /Users/sequoia/learning/Ex_Files_Go_EssT/Exercise Files/logissue.go:25 +0xc4
main.main()
    /Users/sequoia/learning/Ex_Files_Go_EssT/Exercise Files/logissue.go:35 +0xee
exit status 2
LOGTEST: 2019/02/17 18:25:12 test from main

import (
    "fmt"
    "github.com/pkg/errors"
    "log"
    "os"
)

const logfile string = "killer.log"
const logprefix string = "LOGTEST: "

var DLog *log.Logger
func setupLogger(filename, prefix string) {
    var err error
    out, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
    if err != nil {
        log.Fatal( nil, errors.Wrap(err, "can't open logfile for writing"))
    }
    DLog=log.New(out, prefix, log.LstdFlags)

    fmt.Println("Log object: ",DLog)

}

func uselog() error {
    DLog.Print("Hello") ///// < Here is the issue
    DLog.Print("I have something standard to say")

    fmt.Println("I am done")
    return nil
}

func main() {
    setupLogger(logfile, logprefix)
    DLog.Printf("test from main")
    uselog()
}