Rah*_*sad 8 file-io logging buffer go
我有数百个子程序使用log.Println()写入日志文件
我使用log.Println写入error.log文件.
func main() {
e, err := os.OpenFile("error.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
fmt.Printf("error opening file: %v", err)
os.Exit(1)
}
defer e.Close()
errLog := log.New(e, ">>>", log.Ldate|log.Ltime)
for i:=0; i<500; i++ {
go worker(errLog)
}
}
func worker(errLog log.Logger) {
// Do some work
errLog.Println("Hello world!!!")
}
Run Code Online (Sandbox Code Playgroud)
我的方法是否正确?或者我应该使用通道来确保一次只有一个进程登录到文件,还是由日志包固有地处理?
log包还是负责缓冲还是直接写入文件?
Lin*_*ope 17
来自log.go:
func (l *Logger) Output(calldepth int, s string) error {
now := time.Now() // get this early.
var file string
var line int
l.mu.Lock()
defer l.mu.Unlock()
// ... Rest omitted
Run Code Online (Sandbox Code Playgroud)
由于几乎所有的包log输出函数都经过Output,并且有一个互斥锁Output可以安全地说它们是并发安全的.
Vol*_*ker 16
我真的可以推荐阅读文档:
Logger表示一个活动的日志记录对象,它为io.Writer生成输出行.每个日志记录操作只对Writer的Write方法进行一次调用.Logger可以同时使用多个goroutine; 它保证序列化对Writer的访问.
请参阅http://golang.org/pkg/log/#Logger
| 归档时间: |
|
| 查看次数: |
4415 次 |
| 最近记录: |