func writeEntry(client *logging.Client) { // [START write_log_entry] const name = "log-example" logger := client.Logger(name) defer logger.Flush() // Ensure the entry is written. infolog := logger.StandardLogger(logging.Info) infolog.Printf("infolog is a standard Go log.Logger with INFO severity.") // [END write_log_entry] }
func structuredWrite(client *logging.Client) { // [START write_structured_log_entry] const name = "log-example" logger := client.Logger(name) defer logger.Flush() // Ensure the entry is written. logger.Log(logging.Entry{ // Log anything that can be marshaled to JSON. Payload: struct{ Anything string }{ Anything: "The payload can be any type!", }, Severity: logging.Debug, }) // [END write_log_entry] }
func main() { launchConfig.MaybeDeploy() flag.Parse() setProdFlags() if *root == "" { var err error *root, err = os.Getwd() if err != nil { log.Fatalf("Failed to getwd: %v", err) } } readTemplates() if err := initGithubSyncing(); err != nil { log.Fatalf("error setting up syncing to github: %v") } go runDemoBlobserverLoop() mux := http.DefaultServeMux mux.Handle("/favicon.ico", http.FileServer(http.Dir(filepath.Join(*root, "static")))) mux.Handle("/robots.txt", http.FileServer(http.Dir(filepath.Join(*root, "static")))) mux.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir(filepath.Join(*root, "static"))))) mux.Handle("/talks/", http.StripPrefix("/talks/", http.FileServer(http.Dir(filepath.Join(*root, "talks"))))) mux.Handle(pkgPattern, godocHandler{}) mux.Handle(cmdPattern, godocHandler{}) mux.Handle(appPattern, godocHandler{}) mux.HandleFunc(errPattern, errHandler) mux.HandleFunc("/r/", gerritRedirect) mux.HandleFunc("/dl/", releaseRedirect) mux.HandleFunc("/debug/ip", ipHandler) mux.HandleFunc("/debug/uptime", uptimeHandler) mux.Handle("/doc/contributing", redirTo("/code#contributing")) mux.Handle("/lists", redirTo("/community")) mux.HandleFunc("/contributors", contribHandler()) mux.HandleFunc("/doc/", docHandler) mux.HandleFunc("/", mainHandler) if buildbotHost != "" && buildbotBackend != "" { if _, err := url.Parse(buildbotBackend); err != nil { log.Fatalf("Failed to parse %v as a URL: %v", buildbotBackend, err) } bbhpattern := strings.TrimRight(buildbotHost, "/") + "/" mux.HandleFunc(bbhpattern, func(w http.ResponseWriter, r *http.Request) { http.Redirect(w, r, buildbotBackend, http.StatusFound) }) } gceLauncher, err := gceDeployHandler("/launch/") if err != nil { log.Printf("Not installing GCE /launch/ handler: %v", err) mux.HandleFunc("/launch/", func(w http.ResponseWriter, r *http.Request) { http.Error(w, fmt.Sprintf("GCE launcher disabled: %v", err), 500) }) } else { mux.Handle("/launch/", gceLauncher) } var handler http.Handler = &redirectRootHandler{Handler: mux} if *logDir != "" || *logStdout { handler = NewLoggingHandler(handler, NewApacheLogger(*logDir, *logStdout)) } if *gceLogName != "" { projID := projectID() var hc *http.Client if !metadata.OnGCE() { hc = httpClient(projID) } ctx := context.Background() var logc *logging.Client if metadata.OnGCE() { logc, err = logging.NewClient(ctx, projID, *gceLogName) } else { logc, err = logging.NewClient(ctx, projID, *gceLogName, option.WithHTTPClient(hc)) } if err != nil { log.Fatal(err) } if err := logc.Ping(); err != nil { log.Fatalf("Failed to ping Google Cloud Logging: %v", err) } handler = NewLoggingHandler(handler, gceLogger{logc}) if gceLauncher != nil { var logc *logging.Client if metadata.OnGCE() { logc, err = logging.NewClient(ctx, projID, *gceLogName) } else { logc, err = logging.NewClient(ctx, projID, *gceLogName, option.WithHTTPClient(hc)) } if err != nil { log.Fatal(err) } logc.CommonLabels = map[string]string{ "from": "camli-gce-launcher", } logger := logc.Logger(logging.Default) logger.SetPrefix("launcher: ") gceLauncher.SetLogger(logger) } } emailErr := make(chan error) startEmailCommitLoop(emailErr) if *alsoRun != "" { runAsChild(*alsoRun) } httpServer := &http.Server{ Addr: *httpAddr, Handler: handler, ReadTimeout: 5 * time.Minute, WriteTimeout: 30 * time.Minute, } httpErr := make(chan error) go func() { log.Printf("Listening for HTTP on %v", *httpAddr) httpErr <- httpServer.ListenAndServe() }() httpsErr := make(chan error) if *httpsAddr != "" { go func() { httpsErr <- serveHTTPS(httpServer) }() } if *flagChromeBugRepro { go func() { log.Printf("Repro handler failed: %v", repro(":8001", "foo:bar")) }() } select { case err := <-emailErr: log.Fatalf("Error sending emails: %v", err) case err := <-httpErr: log.Fatalf("Error serving HTTP: %v", err) case err := <-httpsErr: log.Fatalf("Error serving HTTPS: %v", err) } }