Universally redirect stdlog messages to glog

pull/4562/head
Thomas Stromberg 2019-06-23 20:58:11 +08:00
parent d94d94718d
commit abff28db7e
4 changed files with 36 additions and 21 deletions

View File

@ -424,7 +424,7 @@ func generateConfig(cmd *cobra.Command, k8sVersion string) (cfg.Config, error) {
repository := viper.GetString(imageRepository)
mirrorCountry := strings.ToLower(viper.GetString(imageMirrorCountry))
if strings.ToLower(repository) == "auto" || mirrorCountry != "" {
console.OutStyle(console.Connectivity, "checking main repository and mirrors for images")
// console.OutStyle(console.Connectivity, "checking main repository and mirrors for images")
found, autoSelectedRepository, err := selectImageRepository(mirrorCountry, k8sVersion)
if err != nil {
exit.WithError("Failed to check main repository and mirrors for images for images", err)

View File

@ -17,7 +17,11 @@ limitations under the License.
package main
import (
"bytes"
"fmt"
"log"
"os"
"strconv"
"github.com/golang/glog"
"github.com/pkg/profile"
@ -32,7 +36,9 @@ import (
const minikubeEnableProfile = "MINIKUBE_ENABLE_PROFILING"
func main() {
captureStdLogMessages()
defer glog.Flush()
if os.Getenv(minikubeEnableProfile) == "1" {
defer profile.Start(profile.TraceProfile).Stop()
}
@ -44,3 +50,31 @@ func main() {
translate.DetermineLocale()
cmd.Execute()
}
// captureStdLogMessages arranges for messages written to the Go "log" package's to appear in glog
func captureStdLogMessages() {
log.SetFlags(log.Lshortfile)
log.SetOutput(logBridge{})
}
type logBridge struct{}
// Write parses the standard logging line and passes its components to glog
func (lb logBridge) Write(b []byte) (n int, err error) {
// Split "d.go:23: message" into "d.go", "23", and "message".
parts := bytes.SplitN(b, []byte{':'}, 3)
if len(parts) != 3 || len(parts[0]) < 1 || len(parts[2]) < 1 {
glog.Errorf("bad log format: %s", b)
return
}
file := string(parts[0])
text := string(parts[2][1:]) // skip leading space
line, err := strconv.Atoi(string(parts[1]))
if err != nil {
text = fmt.Sprintf("bad line number: %s", b)
line = 0
}
glog.Infof("stdlog: %s:%d %s", file, line, text)
return len(b), nil
}

View File

@ -102,3 +102,4 @@ func GetKubeConfigPath() string {
}
return filepath.SplitList(kubeConfigEnv)[0]
}

View File

@ -17,10 +17,7 @@ limitations under the License.
package machine
import (
"bytes"
"io"
"io/ioutil"
"log"
"os"
"os/exec"
"path"
@ -285,23 +282,6 @@ func getDstPath(dst string) (string, error) {
// CacheImage caches an image
func CacheImage(image, dst string) error {
// There are go-containerregistry calls here that result in
// ugly log messages getting printed to stdout. Capture
// stdout instead and writing it to info.
r, w, err := os.Pipe()
if err != nil {
return errors.Wrap(err, "opening writing buffer")
}
log.SetOutput(w)
defer func() {
log.SetOutput(os.Stdout)
var buf bytes.Buffer
if _, err := io.Copy(&buf, r); err != nil {
glog.Errorf("output copy failed: %v", err)
}
glog.Infof(buf.String())
}()
glog.Infof("Attempting to cache image: %s at %s\n", image, dst)
if _, err := os.Stat(dst); err == nil {
return nil