func newLogger(execDir string) { logPath := execDir + "/log/webdav.log" os.MkdirAll(path.Dir(logPath), os.ModePerm) f, err := os.OpenFile(logPath, os.O_WRONLY|os.O_APPEND|os.O_CREATE, os.ModePerm) if err != nil { qlog.Fatal(err) } logger = qlog.New(f, "", qlog.Ldate|qlog.Ltime) logger.Info("Start logging webdav...") }
func main() { server := martini.Classic() config := InitConfig() //添加中间件 server.Use(render.Renderer(render.Options{ //render中间件可以把对象方便的序列化为xml或者json Directory: "./html", Extensions: []string{".html"}, Charset: "UTF-8", })) server.Use(martini.Static("public")) //静态文件服务 //添加路由 //第一个参数是url路径, //之后的参数是处理该路径请求的处理函数, //可以添加多个,依次调用 //方法名表示该路径的HTTP方法,表示只能用GET访问该路径。 server.Get("/", cookie.Bind(UserCookie{}), handleHome) //Group是父路径下添加子路径,下面url分别表示/sched/all, /sched/all, /sched/delete。 //在父路径里添加的处理函数在子路径中都会运行, //比如下面的cookie.Bind(UserCookie{}),该方法返回值是一个函数,表示这个路径以及所有的子路径都绑定了一个cookie。 server.Group("/sched", func(r martini.Router) { r.Post("/add", binding.Form(Sched{}), handleAddSched) r.Get("/all", handleGetSched) r.Post("/delete", handleDelSched) }, cookie.Bind(UserCookie{})) server.Group("/user", func(r martini.Router) { r.Post("/login", binding.Form(UserLoginForm{}), LoginHandler) r.Post("/logout") r.Post("/register", binding.Form(UserRegisterForm{}), RegisterHandler) r.Post("/checklogin", cookie.Bind(UserCookie{}), CheckLoginHandler) r.Group("/bkimg", func(rr martini.Router) { rr.Post("/upload", binding.MultipartForm(Bkimg{}), UploadBkimg) rr.Get("/get", GetBkimg) }, cookie.Bind(UserCookie{})) }) //映射服务 logger := log.New(os.Stdout, "[martini] ", log.Llevel|log.Lshortfile|log.Lmodule) //Map方法传入的对象可以被传入到处理函数的对应参数中。 server.Map(logger) server.Map(config) server.RunOnAddr(":" + config.Server.Port) }
func (l *QiniuLogger) Init(w interface{}) *QiniuLogger { switch writer := w.(type) { case io.Writer: l.writer = writer case string: fd, err := os.OpenFile(writer, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0777) if err != nil { panic(err) } l.writer = fd default: l.writer = os.Stdout } l.logger = log.New(l.writer, "[filesync]", log.LstdFlags|log.Llevel) return l }