大佬教程收集整理的这篇文章主要介绍了Golang Log 学习笔记,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
译 :
log 包实现了一个简单的日志库。 它定义了提供格式化输出接口的类型 : Logger。它还提供了一个预先定义好的“标准”Logger,这个Logger往标准出错打印每一条日志以及他的时间。 可以使用接口 : Print[f|ln],和 Panic[f|ln]
来直接使用”标准”Logger, 比起自己手动创建Logger, 他们要方便的多。 Fatal
接口在写完日志后会调用os.Exit(1)
。Panic
接口在写完日志后会调用panic
。( 如果没有配置panic, 也会导致程序退出)
对于本包的接口,往往会有3个版本 : XXX,XXXf 和 XXXln,含义分别是 :打印 , 格式化打印, 打印并换行 。
package log_test
import "log"
import "os"
import "runtime"
import "fmt"
type LogServer struct {
logger *log.Logger
file *os.File
thread_num uint32
file_name chan String
log_buffer chan String
End chan bool
}
func NewLogger() (*log.Logger,*LogServer) {
new_log := new(LogServer)
new_log.logger = log.New(new_log,"",log.Ldate|log.Ltime|log.LshortfilE)
new_log.file_name = @H_472_107@make(chan String)
new_log.log_buffer = @H_472_107@make(chan String )
new_log.End = @H_472_107@make(chan bool)
go new_log.InitLogThread()
return new_log.logger,new_log
}
func (this *LogServer) InitLogThread() {
for {
SELEct {
case file_name,ok := <-this.file_name:
if ok {
thiS.UseFile(file_name)
}else {
fmt.Println("NO")
}
case a_log,ok := <-this.log_buffer:
if ok {
this.RealLog(a_log)
}else {
fmt.Println("NO")
}
case end,ok:= <-this.End:
if end && ok {
break
}else {
fmt.Println("NO")
}
}
}
}
func (this *LogServer) UseFile(file_name String) {
t_file,err := os.Create(file_name)
if err != nil || t_file == nil {
return
}else {
if this.file != nil {
this.file.Close()
}
this.file = t_file
}
}
func (this *LogServer) RealLog(p String) {
if this.file != nil {
this.file.Write([]byte(p))
}else {
fmt.Println(String(p))
}
}
func (this *LogServer) Write(p []byte) (n int,err error) {
this.log_buffer <- String(p)
return len(p),nil
}
以上是大佬教程为你收集整理的Golang Log 学习笔记全部内容,希望文章能够帮你解决Golang Log 学习笔记所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。