在web项目中,记日志是非常重要的。所以,我做的第一件事,就是向log包动手。
和Python相比,log包功能上逊色不少,但它给我们提供了基础的构架,让我们能自己稍微封装下。
需求
对日志包我的要求很低,只要满足:
1. 提供Error, Info方法即可
2. 日志按天分割,即每隔一天,把昨天的日志保存为 logname.20170823这样的文件
代码
在原来的基础上,我们在src中创建文件夹logger,在里面创建文件logger.go
现在文件结构如下:
src--|
handlers--|
test--|
test.go
logger--|
logger.go
|
main.go
这个文件代码有点长,所以放附录了。
要使用,只需要在main.go里调用:
logger.InitLogging("8080", logger.DEBUG)
logger.Errorln("%s %s", "hi", "my boy")
然后,在bin文件的同级,手工创建logs文件夹。运行程序,日志功能就开始执行了。
测试了一下效率,在mac pro上。10万行日志大概400毫秒。凑合着用还行。
附录logger.go代码
// Package logger 是系统日志的封装,主要在之上封装了Error,Info两个函数。并提供了跨日期
// 自动分割日志文件的功能。
// 可以在InitLogging 后直接使用logger.Error, logger.Info操作默认的日志对象。
// 也可以用logger.New 创建一个自己的日志对象。
package logger
import (
"bytes"
"fmt"
"io"
"log"
"os"
"path/filepath"
"runtime"
"strconv"
"time"
)
//logging 是一个默认的日志对象,提供全局的Error, Info函数供使用,必须调用InitLogging
//函数进行初始化
var logging *Logger
var DEBUG = 0
var INFO = 3
var ERROR = 5
//InitLogging 初始化默认的日志对象,初始化后,就能使用Error,Info函数记录日志
func InitLogging(inputfilename string, level int) {
logging = New(inputfilename, true, false,
level, 3)
}
//Error 默认日志对象方法,记录一条错误日志,需要先初始化
func Error(format string, v ...interface{}) {
logging.Err