You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@htrace.apache.org by cm...@apache.org on 2015/01/31 00:09:46 UTC

incubator-htrace git commit: HTRACE-99. log.go fails to create new log files (cmccabe)

Repository: incubator-htrace
Updated Branches:
  refs/heads/master 4b492b241 -> cec039de5


HTRACE-99. log.go fails to create new log files (cmccabe)


Project: http://git-wip-us.apache.org/repos/asf/incubator-htrace/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-htrace/commit/cec039de
Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/cec039de
Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/cec039de

Branch: refs/heads/master
Commit: cec039de59fd571ac7ac7fe93683746891e04468
Parents: 4b492b2
Author: Colin P. Mccabe <cm...@apache.org>
Authored: Fri Jan 30 15:07:37 2015 -0800
Committer: Colin P. Mccabe <cm...@apache.org>
Committed: Fri Jan 30 15:07:37 2015 -0800

----------------------------------------------------------------------
 .../src/go/src/org/apache/htrace/common/log.go  |   2 +-
 .../go/src/org/apache/htrace/common/log_test.go | 122 +++++++++++++++++++
 2 files changed, 123 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/cec039de/htrace-core/src/go/src/org/apache/htrace/common/log.go
----------------------------------------------------------------------
diff --git a/htrace-core/src/go/src/org/apache/htrace/common/log.go b/htrace-core/src/go/src/org/apache/htrace/common/log.go
index 31faea4..5ced1be 100644
--- a/htrace-core/src/go/src/org/apache/htrace/common/log.go
+++ b/htrace-core/src/go/src/org/apache/htrace/common/log.go
@@ -104,7 +104,7 @@ func (path logPath) Open() *logSink {
 	if path == STDOUT_LOG_PATH {
 		return &logSink{path: path, file: os.Stdout}
 	}
-	file, err := os.OpenFile(string(path), os.O_WRONLY|os.O_APPEND, 0777)
+	file, err := os.OpenFile(string(path), os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0777)
 	if err != nil {
 		sink := &logSink{path: STDOUT_LOG_PATH, file: os.Stdout}
 		fmt.Fprintf(os.Stderr, "Failed to open log file %s: %s\n",

http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/cec039de/htrace-core/src/go/src/org/apache/htrace/common/log_test.go
----------------------------------------------------------------------
diff --git a/htrace-core/src/go/src/org/apache/htrace/common/log_test.go b/htrace-core/src/go/src/org/apache/htrace/common/log_test.go
new file mode 100644
index 0000000..64d6a3f
--- /dev/null
+++ b/htrace-core/src/go/src/org/apache/htrace/common/log_test.go
@@ -0,0 +1,122 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package common
+
+import (
+	"bufio"
+	"fmt"
+	"io"
+	"io/ioutil"
+	"org/apache/htrace/conf"
+	"os"
+	"strings"
+	"testing"
+)
+
+func newLogger(faculty string, args ...string) *Logger {
+	cnfBld := conf.Builder{Defaults: conf.DEFAULTS}
+	cnf, err := cnfBld.Build()
+	if err != nil {
+		panic(fmt.Sprintf("failed to create conf: %s", err.Error()))
+	}
+	cnf2 := cnf.Clone(args...)
+	lg := NewLogger(faculty, cnf2)
+	return lg
+}
+
+func TestNewLogger(t *testing.T) {
+	lg := newLogger("foo", "log.level", "TRACE")
+	lg.Close()
+}
+
+func verifyLines(t *testing.T, rdr io.Reader, lines []string) {
+	scanner := bufio.NewScanner(rdr)
+	lineIdx := 0
+	for scanner.Scan() {
+		line := scanner.Text()
+		if !strings.Contains(line, lines[lineIdx]) {
+			t.Fatalf("Error on line %d: didn't find substring '%s' in line '%s'\n",
+					(lineIdx + 1), lines[lineIdx], line)
+		}
+		lineIdx++
+	}
+	if err := scanner.Err(); err != nil {
+		t.Fatal(err.Error())
+	}
+}
+
+func TestFileLogs(t *testing.T) {
+	tempDir, err := ioutil.TempDir(os.TempDir(), "testFileLogs")
+	if err != nil {
+		panic(fmt.Sprintf("error creating tempdir: %s\n", err.Error()))
+	}
+	defer os.RemoveAll(tempDir)
+	logPath := tempDir + conf.PATH_SEP + "log"
+	lg := newLogger("foo", "log.level", "DEBUG",
+		"foo.log.level", "INFO",
+		"log.path", logPath)
+	lg.Tracef("Non-important stuff, ignore this.\n")
+	lg.Infof("problem with the foobar\n")
+	lg.Tracef("More non-important stuff, also ignore this.\n")
+	lg.Infof("and another problem with the foobar\n")
+	logFile, err := os.Open(logPath)
+	if err != nil {
+		t.Fatalf("failed to open file %s: %s\n", logPath, err.Error())
+	}
+	verifyLines(t, logFile, []string {
+		"problem with the foobar",
+		"and another problem with the foobar",
+	})
+	logFile.Close()
+	lg.Close()
+}
+
+func TestMultipleFileLogs(t *testing.T) {
+	tempDir, err := ioutil.TempDir(os.TempDir(), "testMultipleFileLogs")
+	if err != nil {
+		panic(fmt.Sprintf("error creating tempdir: %s\n", err.Error()))
+	}
+	defer os.RemoveAll(tempDir)
+	logPath := tempDir + conf.PATH_SEP + "log"
+	fooLg := newLogger("foo", "log.level", "DEBUG",
+		"foo.log.level", "INFO",
+		"log.path", logPath)
+	fooLg.Infof("The foo needs maintenance.\n")
+	barLg := newLogger("bar", "log.level", "DEBUG",
+		"foo.log.level", "INFO",
+		"log.path", logPath)
+	barLg.Debugf("The bar is open\n")
+	fooLg.Errorf("Fizz buzz\n")
+	logFile, err := os.Open(logPath)
+	if err != nil {
+		t.Fatalf("failed to open file %s: %s\n", logPath, err.Error())
+	}
+	fooLg.Tracef("Fizz buzz2\n")
+	barLg.Tracef("Fizz buzz3\n")
+	verifyLines(t, logFile, []string {
+		"The foo needs maintenance.",
+		"The bar is open",
+		"Fizz buzz",
+		"Fizz buzz3",
+	})
+	logFile.Close()
+	fooLg.Close()
+	barLg.Close()
+}