Merge pull request #1852 from mattermost/PLT-1608
PLT-1608 Upgrading logging package
Этот коммит содержится в:
5
Godeps/Godeps.json
сгенерированный
5
Godeps/Godeps.json
сгенерированный
@@ -3,9 +3,8 @@
|
|||||||
"GoVersion": "go1.5.1",
|
"GoVersion": "go1.5.1",
|
||||||
"Deps": [
|
"Deps": [
|
||||||
{
|
{
|
||||||
"ImportPath": "code.google.com/p/log4go",
|
"ImportPath": "github.com/alecthomas/log4go",
|
||||||
"Comment": "go.weekly.2012-02-22-1",
|
"Rev": "8e9057c3b25c409a34c0b9737cdc82cbcafeabce"
|
||||||
"Rev": "c3294304d93f48a37d3bed1d382882a9c2989f99"
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/braintree/manners",
|
"ImportPath": "github.com/braintree/manners",
|
||||||
|
|||||||
4
Godeps/_workspace/src/code.google.com/p/log4go/.hgtags
сгенерированный
поставляемый
4
Godeps/_workspace/src/code.google.com/p/log4go/.hgtags
сгенерированный
поставляемый
@@ -1,4 +0,0 @@
|
|||||||
4fbe6aadba231e838a449d340e43bdaab0bf85bd go.weekly.2012-02-07
|
|
||||||
56168fd53249d639c25c74ced881fffb20d27be9 go.weekly.2012-02-22
|
|
||||||
56168fd53249d639c25c74ced881fffb20d27be9 go.weekly.2012-02-22
|
|
||||||
5c22fbd77d91f54d76cdbdee05318699754c44cc go.weekly.2012-02-22
|
|
||||||
534
Godeps/_workspace/src/code.google.com/p/log4go/log4go_test.go
сгенерированный
поставляемый
534
Godeps/_workspace/src/code.google.com/p/log4go/log4go_test.go
сгенерированный
поставляемый
@@ -1,534 +0,0 @@
|
|||||||
// Copyright (C) 2010, Kyle Lemons <kyle@kylelemons.net>. All rights reserved.
|
|
||||||
|
|
||||||
package log4go
|
|
||||||
|
|
||||||
import (
|
|
||||||
"crypto/md5"
|
|
||||||
"encoding/hex"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"testing"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
const testLogFile = "_logtest.log"
|
|
||||||
|
|
||||||
var now time.Time = time.Unix(0, 1234567890123456789).In(time.UTC)
|
|
||||||
|
|
||||||
func newLogRecord(lvl level, src string, msg string) *LogRecord {
|
|
||||||
return &LogRecord{
|
|
||||||
Level: lvl,
|
|
||||||
Source: src,
|
|
||||||
Created: now,
|
|
||||||
Message: msg,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestELog(t *testing.T) {
|
|
||||||
fmt.Printf("Testing %s\n", L4G_VERSION)
|
|
||||||
lr := newLogRecord(CRITICAL, "source", "message")
|
|
||||||
if lr.Level != CRITICAL {
|
|
||||||
t.Errorf("Incorrect level: %d should be %d", lr.Level, CRITICAL)
|
|
||||||
}
|
|
||||||
if lr.Source != "source" {
|
|
||||||
t.Errorf("Incorrect source: %s should be %s", lr.Source, "source")
|
|
||||||
}
|
|
||||||
if lr.Message != "message" {
|
|
||||||
t.Errorf("Incorrect message: %s should be %s", lr.Source, "message")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var formatTests = []struct {
|
|
||||||
Test string
|
|
||||||
Record *LogRecord
|
|
||||||
Formats map[string]string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
Test: "Standard formats",
|
|
||||||
Record: &LogRecord{
|
|
||||||
Level: ERROR,
|
|
||||||
Source: "source",
|
|
||||||
Message: "message",
|
|
||||||
Created: now,
|
|
||||||
},
|
|
||||||
Formats: map[string]string{
|
|
||||||
// TODO(kevlar): How can I do this so it'll work outside of PST?
|
|
||||||
FORMAT_DEFAULT: "[2009/02/13 23:31:30 UTC] [EROR] (source) message\n",
|
|
||||||
FORMAT_SHORT: "[23:31 02/13/09] [EROR] message\n",
|
|
||||||
FORMAT_ABBREV: "[EROR] message\n",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestFormatLogRecord(t *testing.T) {
|
|
||||||
for _, test := range formatTests {
|
|
||||||
name := test.Test
|
|
||||||
for fmt, want := range test.Formats {
|
|
||||||
if got := FormatLogRecord(fmt, test.Record); got != want {
|
|
||||||
t.Errorf("%s - %s:", name, fmt)
|
|
||||||
t.Errorf(" got %q", got)
|
|
||||||
t.Errorf(" want %q", want)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var logRecordWriteTests = []struct {
|
|
||||||
Test string
|
|
||||||
Record *LogRecord
|
|
||||||
Console string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
Test: "Normal message",
|
|
||||||
Record: &LogRecord{
|
|
||||||
Level: CRITICAL,
|
|
||||||
Source: "source",
|
|
||||||
Message: "message",
|
|
||||||
Created: now,
|
|
||||||
},
|
|
||||||
Console: "[02/13/09 23:31:30] [CRIT] message\n",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestConsoleLogWriter(t *testing.T) {
|
|
||||||
console := make(ConsoleLogWriter)
|
|
||||||
|
|
||||||
r, w := io.Pipe()
|
|
||||||
go console.run(w)
|
|
||||||
defer console.Close()
|
|
||||||
|
|
||||||
buf := make([]byte, 1024)
|
|
||||||
|
|
||||||
for _, test := range logRecordWriteTests {
|
|
||||||
name := test.Test
|
|
||||||
|
|
||||||
console.LogWrite(test.Record)
|
|
||||||
n, _ := r.Read(buf)
|
|
||||||
|
|
||||||
if got, want := string(buf[:n]), test.Console; got != want {
|
|
||||||
t.Errorf("%s: got %q", name, got)
|
|
||||||
t.Errorf("%s: want %q", name, want)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestFileLogWriter(t *testing.T) {
|
|
||||||
defer func(buflen int) {
|
|
||||||
LogBufferLength = buflen
|
|
||||||
}(LogBufferLength)
|
|
||||||
LogBufferLength = 0
|
|
||||||
|
|
||||||
w := NewFileLogWriter(testLogFile, false)
|
|
||||||
if w == nil {
|
|
||||||
t.Fatalf("Invalid return: w should not be nil")
|
|
||||||
}
|
|
||||||
defer os.Remove(testLogFile)
|
|
||||||
|
|
||||||
w.LogWrite(newLogRecord(CRITICAL, "source", "message"))
|
|
||||||
w.Close()
|
|
||||||
runtime.Gosched()
|
|
||||||
|
|
||||||
if contents, err := ioutil.ReadFile(testLogFile); err != nil {
|
|
||||||
t.Errorf("read(%q): %s", testLogFile, err)
|
|
||||||
} else if len(contents) != 50 {
|
|
||||||
t.Errorf("malformed filelog: %q (%d bytes)", string(contents), len(contents))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestXMLLogWriter(t *testing.T) {
|
|
||||||
defer func(buflen int) {
|
|
||||||
LogBufferLength = buflen
|
|
||||||
}(LogBufferLength)
|
|
||||||
LogBufferLength = 0
|
|
||||||
|
|
||||||
w := NewXMLLogWriter(testLogFile, false)
|
|
||||||
if w == nil {
|
|
||||||
t.Fatalf("Invalid return: w should not be nil")
|
|
||||||
}
|
|
||||||
defer os.Remove(testLogFile)
|
|
||||||
|
|
||||||
w.LogWrite(newLogRecord(CRITICAL, "source", "message"))
|
|
||||||
w.Close()
|
|
||||||
runtime.Gosched()
|
|
||||||
|
|
||||||
if contents, err := ioutil.ReadFile(testLogFile); err != nil {
|
|
||||||
t.Errorf("read(%q): %s", testLogFile, err)
|
|
||||||
} else if len(contents) != 185 {
|
|
||||||
t.Errorf("malformed xmllog: %q (%d bytes)", string(contents), len(contents))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLogger(t *testing.T) {
|
|
||||||
sl := NewDefaultLogger(WARNING)
|
|
||||||
if sl == nil {
|
|
||||||
t.Fatalf("NewDefaultLogger should never return nil")
|
|
||||||
}
|
|
||||||
if lw, exist := sl["stdout"]; lw == nil || exist != true {
|
|
||||||
t.Fatalf("NewDefaultLogger produced invalid logger (DNE or nil)")
|
|
||||||
}
|
|
||||||
if sl["stdout"].Level != WARNING {
|
|
||||||
t.Fatalf("NewDefaultLogger produced invalid logger (incorrect level)")
|
|
||||||
}
|
|
||||||
if len(sl) != 1 {
|
|
||||||
t.Fatalf("NewDefaultLogger produced invalid logger (incorrect map count)")
|
|
||||||
}
|
|
||||||
|
|
||||||
//func (l *Logger) AddFilter(name string, level int, writer LogWriter) {}
|
|
||||||
l := make(Logger)
|
|
||||||
l.AddFilter("stdout", DEBUG, NewConsoleLogWriter())
|
|
||||||
if lw, exist := l["stdout"]; lw == nil || exist != true {
|
|
||||||
t.Fatalf("AddFilter produced invalid logger (DNE or nil)")
|
|
||||||
}
|
|
||||||
if l["stdout"].Level != DEBUG {
|
|
||||||
t.Fatalf("AddFilter produced invalid logger (incorrect level)")
|
|
||||||
}
|
|
||||||
if len(l) != 1 {
|
|
||||||
t.Fatalf("AddFilter produced invalid logger (incorrect map count)")
|
|
||||||
}
|
|
||||||
|
|
||||||
//func (l *Logger) Warn(format string, args ...interface{}) error {}
|
|
||||||
if err := l.Warn("%s %d %#v", "Warning:", 1, []int{}); err.Error() != "Warning: 1 []int{}" {
|
|
||||||
t.Errorf("Warn returned invalid error: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
//func (l *Logger) Error(format string, args ...interface{}) error {}
|
|
||||||
if err := l.Error("%s %d %#v", "Error:", 10, []string{}); err.Error() != "Error: 10 []string{}" {
|
|
||||||
t.Errorf("Error returned invalid error: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
//func (l *Logger) Critical(format string, args ...interface{}) error {}
|
|
||||||
if err := l.Critical("%s %d %#v", "Critical:", 100, []int64{}); err.Error() != "Critical: 100 []int64{}" {
|
|
||||||
t.Errorf("Critical returned invalid error: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Already tested or basically untestable
|
|
||||||
//func (l *Logger) Log(level int, source, message string) {}
|
|
||||||
//func (l *Logger) Logf(level int, format string, args ...interface{}) {}
|
|
||||||
//func (l *Logger) intLogf(level int, format string, args ...interface{}) string {}
|
|
||||||
//func (l *Logger) Finest(format string, args ...interface{}) {}
|
|
||||||
//func (l *Logger) Fine(format string, args ...interface{}) {}
|
|
||||||
//func (l *Logger) Debug(format string, args ...interface{}) {}
|
|
||||||
//func (l *Logger) Trace(format string, args ...interface{}) {}
|
|
||||||
//func (l *Logger) Info(format string, args ...interface{}) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestLogOutput(t *testing.T) {
|
|
||||||
const (
|
|
||||||
expected = "fdf3e51e444da56b4cb400f30bc47424"
|
|
||||||
)
|
|
||||||
|
|
||||||
// Unbuffered output
|
|
||||||
defer func(buflen int) {
|
|
||||||
LogBufferLength = buflen
|
|
||||||
}(LogBufferLength)
|
|
||||||
LogBufferLength = 0
|
|
||||||
|
|
||||||
l := make(Logger)
|
|
||||||
|
|
||||||
// Delete and open the output log without a timestamp (for a constant md5sum)
|
|
||||||
l.AddFilter("file", FINEST, NewFileLogWriter(testLogFile, false).SetFormat("[%L] %M"))
|
|
||||||
defer os.Remove(testLogFile)
|
|
||||||
|
|
||||||
// Send some log messages
|
|
||||||
l.Log(CRITICAL, "testsrc1", fmt.Sprintf("This message is level %d", int(CRITICAL)))
|
|
||||||
l.Logf(ERROR, "This message is level %v", ERROR)
|
|
||||||
l.Logf(WARNING, "This message is level %s", WARNING)
|
|
||||||
l.Logc(INFO, func() string { return "This message is level INFO" })
|
|
||||||
l.Trace("This message is level %d", int(TRACE))
|
|
||||||
l.Debug("This message is level %s", DEBUG)
|
|
||||||
l.Fine(func() string { return fmt.Sprintf("This message is level %v", FINE) })
|
|
||||||
l.Finest("This message is level %v", FINEST)
|
|
||||||
l.Finest(FINEST, "is also this message's level")
|
|
||||||
|
|
||||||
l.Close()
|
|
||||||
|
|
||||||
contents, err := ioutil.ReadFile(testLogFile)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Could not read output log: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
sum := md5.New()
|
|
||||||
sum.Write(contents)
|
|
||||||
if sumstr := hex.EncodeToString(sum.Sum(nil)); sumstr != expected {
|
|
||||||
t.Errorf("--- Log Contents:\n%s---", string(contents))
|
|
||||||
t.Fatalf("Checksum does not match: %s (expecting %s)", sumstr, expected)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCountMallocs(t *testing.T) {
|
|
||||||
const N = 1
|
|
||||||
var m runtime.MemStats
|
|
||||||
getMallocs := func() uint64 {
|
|
||||||
runtime.ReadMemStats(&m)
|
|
||||||
return m.Mallocs
|
|
||||||
}
|
|
||||||
|
|
||||||
// Console logger
|
|
||||||
sl := NewDefaultLogger(INFO)
|
|
||||||
mallocs := 0 - getMallocs()
|
|
||||||
for i := 0; i < N; i++ {
|
|
||||||
sl.Log(WARNING, "here", "This is a WARNING message")
|
|
||||||
}
|
|
||||||
mallocs += getMallocs()
|
|
||||||
fmt.Printf("mallocs per sl.Log((WARNING, \"here\", \"This is a log message\"): %d\n", mallocs/N)
|
|
||||||
|
|
||||||
// Console logger formatted
|
|
||||||
mallocs = 0 - getMallocs()
|
|
||||||
for i := 0; i < N; i++ {
|
|
||||||
sl.Logf(WARNING, "%s is a log message with level %d", "This", WARNING)
|
|
||||||
}
|
|
||||||
mallocs += getMallocs()
|
|
||||||
fmt.Printf("mallocs per sl.Logf(WARNING, \"%%s is a log message with level %%d\", \"This\", WARNING): %d\n", mallocs/N)
|
|
||||||
|
|
||||||
// Console logger (not logged)
|
|
||||||
sl = NewDefaultLogger(INFO)
|
|
||||||
mallocs = 0 - getMallocs()
|
|
||||||
for i := 0; i < N; i++ {
|
|
||||||
sl.Log(DEBUG, "here", "This is a DEBUG log message")
|
|
||||||
}
|
|
||||||
mallocs += getMallocs()
|
|
||||||
fmt.Printf("mallocs per unlogged sl.Log((WARNING, \"here\", \"This is a log message\"): %d\n", mallocs/N)
|
|
||||||
|
|
||||||
// Console logger formatted (not logged)
|
|
||||||
mallocs = 0 - getMallocs()
|
|
||||||
for i := 0; i < N; i++ {
|
|
||||||
sl.Logf(DEBUG, "%s is a log message with level %d", "This", DEBUG)
|
|
||||||
}
|
|
||||||
mallocs += getMallocs()
|
|
||||||
fmt.Printf("mallocs per unlogged sl.Logf(WARNING, \"%%s is a log message with level %%d\", \"This\", WARNING): %d\n", mallocs/N)
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestXMLConfig(t *testing.T) {
|
|
||||||
const (
|
|
||||||
configfile = "example.xml"
|
|
||||||
)
|
|
||||||
|
|
||||||
fd, err := os.Create(configfile)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("Could not open %s for writing: %s", configfile, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Fprintln(fd, "<logging>")
|
|
||||||
fmt.Fprintln(fd, " <filter enabled=\"true\">")
|
|
||||||
fmt.Fprintln(fd, " <tag>stdout</tag>")
|
|
||||||
fmt.Fprintln(fd, " <type>console</type>")
|
|
||||||
fmt.Fprintln(fd, " <!-- level is (:?FINEST|FINE|DEBUG|TRACE|INFO|WARNING|ERROR) -->")
|
|
||||||
fmt.Fprintln(fd, " <level>DEBUG</level>")
|
|
||||||
fmt.Fprintln(fd, " </filter>")
|
|
||||||
fmt.Fprintln(fd, " <filter enabled=\"true\">")
|
|
||||||
fmt.Fprintln(fd, " <tag>file</tag>")
|
|
||||||
fmt.Fprintln(fd, " <type>file</type>")
|
|
||||||
fmt.Fprintln(fd, " <level>FINEST</level>")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"filename\">test.log</property>")
|
|
||||||
fmt.Fprintln(fd, " <!--")
|
|
||||||
fmt.Fprintln(fd, " %T - Time (15:04:05 MST)")
|
|
||||||
fmt.Fprintln(fd, " %t - Time (15:04)")
|
|
||||||
fmt.Fprintln(fd, " %D - Date (2006/01/02)")
|
|
||||||
fmt.Fprintln(fd, " %d - Date (01/02/06)")
|
|
||||||
fmt.Fprintln(fd, " %L - Level (FNST, FINE, DEBG, TRAC, WARN, EROR, CRIT)")
|
|
||||||
fmt.Fprintln(fd, " %S - Source")
|
|
||||||
fmt.Fprintln(fd, " %M - Message")
|
|
||||||
fmt.Fprintln(fd, " It ignores unknown format strings (and removes them)")
|
|
||||||
fmt.Fprintln(fd, " Recommended: \"[%D %T] [%L] (%S) %M\"")
|
|
||||||
fmt.Fprintln(fd, " -->")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"format\">[%D %T] [%L] (%S) %M</property>")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"rotate\">false</property> <!-- true enables log rotation, otherwise append -->")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"maxsize\">0M</property> <!-- \\d+[KMG]? Suffixes are in terms of 2**10 -->")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"maxlines\">0K</property> <!-- \\d+[KMG]? Suffixes are in terms of thousands -->")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"daily\">true</property> <!-- Automatically rotates when a log message is written after midnight -->")
|
|
||||||
fmt.Fprintln(fd, " </filter>")
|
|
||||||
fmt.Fprintln(fd, " <filter enabled=\"true\">")
|
|
||||||
fmt.Fprintln(fd, " <tag>xmllog</tag>")
|
|
||||||
fmt.Fprintln(fd, " <type>xml</type>")
|
|
||||||
fmt.Fprintln(fd, " <level>TRACE</level>")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"filename\">trace.xml</property>")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"rotate\">true</property> <!-- true enables log rotation, otherwise append -->")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"maxsize\">100M</property> <!-- \\d+[KMG]? Suffixes are in terms of 2**10 -->")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"maxrecords\">6K</property> <!-- \\d+[KMG]? Suffixes are in terms of thousands -->")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"daily\">false</property> <!-- Automatically rotates when a log message is written after midnight -->")
|
|
||||||
fmt.Fprintln(fd, " </filter>")
|
|
||||||
fmt.Fprintln(fd, " <filter enabled=\"false\"><!-- enabled=false means this logger won't actually be created -->")
|
|
||||||
fmt.Fprintln(fd, " <tag>donotopen</tag>")
|
|
||||||
fmt.Fprintln(fd, " <type>socket</type>")
|
|
||||||
fmt.Fprintln(fd, " <level>FINEST</level>")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"endpoint\">192.168.1.255:12124</property> <!-- recommend UDP broadcast -->")
|
|
||||||
fmt.Fprintln(fd, " <property name=\"protocol\">udp</property> <!-- tcp or udp -->")
|
|
||||||
fmt.Fprintln(fd, " </filter>")
|
|
||||||
fmt.Fprintln(fd, "</logging>")
|
|
||||||
fd.Close()
|
|
||||||
|
|
||||||
log := make(Logger)
|
|
||||||
log.LoadConfiguration(configfile)
|
|
||||||
defer os.Remove("trace.xml")
|
|
||||||
defer os.Remove("test.log")
|
|
||||||
defer log.Close()
|
|
||||||
|
|
||||||
// Make sure we got all loggers
|
|
||||||
if len(log) != 3 {
|
|
||||||
t.Fatalf("XMLConfig: Expected 3 filters, found %d", len(log))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure they're the right keys
|
|
||||||
if _, ok := log["stdout"]; !ok {
|
|
||||||
t.Errorf("XMLConfig: Expected stdout logger")
|
|
||||||
}
|
|
||||||
if _, ok := log["file"]; !ok {
|
|
||||||
t.Fatalf("XMLConfig: Expected file logger")
|
|
||||||
}
|
|
||||||
if _, ok := log["xmllog"]; !ok {
|
|
||||||
t.Fatalf("XMLConfig: Expected xmllog logger")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure they're the right type
|
|
||||||
if _, ok := log["stdout"].LogWriter.(ConsoleLogWriter); !ok {
|
|
||||||
t.Fatalf("XMLConfig: Expected stdout to be ConsoleLogWriter, found %T", log["stdout"].LogWriter)
|
|
||||||
}
|
|
||||||
if _, ok := log["file"].LogWriter.(*FileLogWriter); !ok {
|
|
||||||
t.Fatalf("XMLConfig: Expected file to be *FileLogWriter, found %T", log["file"].LogWriter)
|
|
||||||
}
|
|
||||||
if _, ok := log["xmllog"].LogWriter.(*FileLogWriter); !ok {
|
|
||||||
t.Fatalf("XMLConfig: Expected xmllog to be *FileLogWriter, found %T", log["xmllog"].LogWriter)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure levels are set
|
|
||||||
if lvl := log["stdout"].Level; lvl != DEBUG {
|
|
||||||
t.Errorf("XMLConfig: Expected stdout to be set to level %d, found %d", DEBUG, lvl)
|
|
||||||
}
|
|
||||||
if lvl := log["file"].Level; lvl != FINEST {
|
|
||||||
t.Errorf("XMLConfig: Expected file to be set to level %d, found %d", FINEST, lvl)
|
|
||||||
}
|
|
||||||
if lvl := log["xmllog"].Level; lvl != TRACE {
|
|
||||||
t.Errorf("XMLConfig: Expected xmllog to be set to level %d, found %d", TRACE, lvl)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure the w is open and points to the right file
|
|
||||||
if fname := log["file"].LogWriter.(*FileLogWriter).file.Name(); fname != "test.log" {
|
|
||||||
t.Errorf("XMLConfig: Expected file to have opened %s, found %s", "test.log", fname)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make sure the XLW is open and points to the right file
|
|
||||||
if fname := log["xmllog"].LogWriter.(*FileLogWriter).file.Name(); fname != "trace.xml" {
|
|
||||||
t.Errorf("XMLConfig: Expected xmllog to have opened %s, found %s", "trace.xml", fname)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Move XML log file
|
|
||||||
os.Rename(configfile, "examples/"+configfile) // Keep this so that an example with the documentation is available
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkFormatLogRecord(b *testing.B) {
|
|
||||||
const updateEvery = 1
|
|
||||||
rec := &LogRecord{
|
|
||||||
Level: CRITICAL,
|
|
||||||
Created: now,
|
|
||||||
Source: "source",
|
|
||||||
Message: "message",
|
|
||||||
}
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
rec.Created = rec.Created.Add(1 * time.Second / updateEvery)
|
|
||||||
if i%2 == 0 {
|
|
||||||
FormatLogRecord(FORMAT_DEFAULT, rec)
|
|
||||||
} else {
|
|
||||||
FormatLogRecord(FORMAT_SHORT, rec)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkConsoleLog(b *testing.B) {
|
|
||||||
/* This doesn't seem to work on OS X
|
|
||||||
sink, err := os.Open(os.DevNull)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if err := syscall.Dup2(int(sink.Fd()), syscall.Stdout); err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
stdout = ioutil.Discard
|
|
||||||
sl := NewDefaultLogger(INFO)
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
sl.Log(WARNING, "here", "This is a log message")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkConsoleNotLogged(b *testing.B) {
|
|
||||||
sl := NewDefaultLogger(INFO)
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
sl.Log(DEBUG, "here", "This is a log message")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkConsoleUtilLog(b *testing.B) {
|
|
||||||
sl := NewDefaultLogger(INFO)
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
sl.Info("%s is a log message", "This")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkConsoleUtilNotLog(b *testing.B) {
|
|
||||||
sl := NewDefaultLogger(INFO)
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
sl.Debug("%s is a log message", "This")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkFileLog(b *testing.B) {
|
|
||||||
sl := make(Logger)
|
|
||||||
b.StopTimer()
|
|
||||||
sl.AddFilter("file", INFO, NewFileLogWriter("benchlog.log", false))
|
|
||||||
b.StartTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
sl.Log(WARNING, "here", "This is a log message")
|
|
||||||
}
|
|
||||||
b.StopTimer()
|
|
||||||
os.Remove("benchlog.log")
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkFileNotLogged(b *testing.B) {
|
|
||||||
sl := make(Logger)
|
|
||||||
b.StopTimer()
|
|
||||||
sl.AddFilter("file", INFO, NewFileLogWriter("benchlog.log", false))
|
|
||||||
b.StartTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
sl.Log(DEBUG, "here", "This is a log message")
|
|
||||||
}
|
|
||||||
b.StopTimer()
|
|
||||||
os.Remove("benchlog.log")
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkFileUtilLog(b *testing.B) {
|
|
||||||
sl := make(Logger)
|
|
||||||
b.StopTimer()
|
|
||||||
sl.AddFilter("file", INFO, NewFileLogWriter("benchlog.log", false))
|
|
||||||
b.StartTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
sl.Info("%s is a log message", "This")
|
|
||||||
}
|
|
||||||
b.StopTimer()
|
|
||||||
os.Remove("benchlog.log")
|
|
||||||
}
|
|
||||||
|
|
||||||
func BenchmarkFileUtilNotLog(b *testing.B) {
|
|
||||||
sl := make(Logger)
|
|
||||||
b.StopTimer()
|
|
||||||
sl.AddFilter("file", INFO, NewFileLogWriter("benchlog.log", false))
|
|
||||||
b.StartTimer()
|
|
||||||
for i := 0; i < b.N; i++ {
|
|
||||||
sl.Debug("%s is a log message", "This")
|
|
||||||
}
|
|
||||||
b.StopTimer()
|
|
||||||
os.Remove("benchlog.log")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Benchmark results (darwin amd64 6g)
|
|
||||||
//elog.BenchmarkConsoleLog 100000 22819 ns/op
|
|
||||||
//elog.BenchmarkConsoleNotLogged 2000000 879 ns/op
|
|
||||||
//elog.BenchmarkConsoleUtilLog 50000 34380 ns/op
|
|
||||||
//elog.BenchmarkConsoleUtilNotLog 1000000 1339 ns/op
|
|
||||||
//elog.BenchmarkFileLog 100000 26497 ns/op
|
|
||||||
//elog.BenchmarkFileNotLogged 2000000 821 ns/op
|
|
||||||
//elog.BenchmarkFileUtilLog 50000 33945 ns/op
|
|
||||||
//elog.BenchmarkFileUtilNotLog 1000000 1258 ns/op
|
|
||||||
45
Godeps/_workspace/src/code.google.com/p/log4go/termlog.go
сгенерированный
поставляемый
45
Godeps/_workspace/src/code.google.com/p/log4go/termlog.go
сгенерированный
поставляемый
@@ -1,45 +0,0 @@
|
|||||||
// Copyright (C) 2010, Kyle Lemons <kyle@kylelemons.net>. All rights reserved.
|
|
||||||
|
|
||||||
package log4go
|
|
||||||
|
|
||||||
import (
|
|
||||||
"io"
|
|
||||||
"os"
|
|
||||||
"fmt"
|
|
||||||
)
|
|
||||||
|
|
||||||
var stdout io.Writer = os.Stdout
|
|
||||||
|
|
||||||
// This is the standard writer that prints to standard output.
|
|
||||||
type ConsoleLogWriter chan *LogRecord
|
|
||||||
|
|
||||||
// This creates a new ConsoleLogWriter
|
|
||||||
func NewConsoleLogWriter() ConsoleLogWriter {
|
|
||||||
records := make(ConsoleLogWriter, LogBufferLength)
|
|
||||||
go records.run(stdout)
|
|
||||||
return records
|
|
||||||
}
|
|
||||||
|
|
||||||
func (w ConsoleLogWriter) run(out io.Writer) {
|
|
||||||
var timestr string
|
|
||||||
var timestrAt int64
|
|
||||||
|
|
||||||
for rec := range w {
|
|
||||||
if at := rec.Created.UnixNano() / 1e9; at != timestrAt {
|
|
||||||
timestr, timestrAt = rec.Created.Format("01/02/06 15:04:05"), at
|
|
||||||
}
|
|
||||||
fmt.Fprint(out, "[", timestr, "] [", levelStrings[rec.Level], "] ", rec.Message, "\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// This is the ConsoleLogWriter's output method. This will block if the output
|
|
||||||
// buffer is full.
|
|
||||||
func (w ConsoleLogWriter) LogWrite(rec *LogRecord) {
|
|
||||||
w <- rec
|
|
||||||
}
|
|
||||||
|
|
||||||
// Close stops the logger from sending messages to standard output. Attempts to
|
|
||||||
// send log messages to this logger after a Close have undefined behavior.
|
|
||||||
func (w ConsoleLogWriter) Close() {
|
|
||||||
close(w)
|
|
||||||
}
|
|
||||||
2
Godeps/_workspace/src/github.com/alecthomas/log4go/.gitignore
сгенерированный
поставляемый
Обычный файл
2
Godeps/_workspace/src/github.com/alecthomas/log4go/.gitignore
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,2 @@
|
|||||||
|
*.sw[op]
|
||||||
|
.DS_Store
|
||||||
0
Godeps/_workspace/src/code.google.com/p/log4go/LICENSE → Godeps/_workspace/src/github.com/alecthomas/log4go/LICENSE
сгенерированный
поставляемый
0
Godeps/_workspace/src/code.google.com/p/log4go/LICENSE → Godeps/_workspace/src/github.com/alecthomas/log4go/LICENSE
сгенерированный
поставляемый
0
Godeps/_workspace/src/code.google.com/p/log4go/README → Godeps/_workspace/src/github.com/alecthomas/log4go/README
сгенерированный
поставляемый
0
Godeps/_workspace/src/code.google.com/p/log4go/README → Godeps/_workspace/src/github.com/alecthomas/log4go/README
сгенерированный
поставляемый
4
Godeps/_workspace/src/code.google.com/p/log4go/config.go → Godeps/_workspace/src/github.com/alecthomas/log4go/config.go
сгенерированный
поставляемый
4
Godeps/_workspace/src/code.google.com/p/log4go/config.go → Godeps/_workspace/src/github.com/alecthomas/log4go/config.go
сгенерированный
поставляемый
@@ -53,7 +53,7 @@ func (log Logger) LoadConfiguration(filename string) {
|
|||||||
|
|
||||||
for _, xmlfilt := range xc.Filter {
|
for _, xmlfilt := range xc.Filter {
|
||||||
var filt LogWriter
|
var filt LogWriter
|
||||||
var lvl level
|
var lvl Level
|
||||||
bad, good, enabled := false, true, false
|
bad, good, enabled := false, true, false
|
||||||
|
|
||||||
// Check required children
|
// Check required children
|
||||||
@@ -131,7 +131,7 @@ func (log Logger) LoadConfiguration(filename string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func xmlToConsoleLogWriter(filename string, props []xmlProperty, enabled bool) (ConsoleLogWriter, bool) {
|
func xmlToConsoleLogWriter(filename string, props []xmlProperty, enabled bool) (*ConsoleLogWriter, bool) {
|
||||||
// Parse properties
|
// Parse properties
|
||||||
for _, prop := range props {
|
for _, prop := range props {
|
||||||
switch prop.Name {
|
switch prop.Name {
|
||||||
@@ -8,6 +8,7 @@ import l4g "code.google.com/p/log4go"
|
|||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
log := l4g.NewLogger()
|
log := l4g.NewLogger()
|
||||||
|
defer log.Close()
|
||||||
log.AddFilter("stdout", l4g.DEBUG, l4g.NewConsoleLogWriter())
|
log.AddFilter("stdout", l4g.DEBUG, l4g.NewConsoleLogWriter())
|
||||||
log.Info("The time is now: %s", time.Now().Format("15:04:05 MST 2006/01/02"))
|
log.Info("The time is now: %s", time.Now().Format("15:04:05 MST 2006/01/02"))
|
||||||
}
|
}
|
||||||
53
Godeps/_workspace/src/code.google.com/p/log4go/filelog.go → Godeps/_workspace/src/github.com/alecthomas/log4go/filelog.go
сгенерированный
поставляемый
53
Godeps/_workspace/src/code.google.com/p/log4go/filelog.go → Godeps/_workspace/src/github.com/alecthomas/log4go/filelog.go
сгенерированный
поставляемый
@@ -3,8 +3,8 @@
|
|||||||
package log4go
|
package log4go
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -36,7 +36,8 @@ type FileLogWriter struct {
|
|||||||
daily_opendate int
|
daily_opendate int
|
||||||
|
|
||||||
// Keep old logfiles (.001, .002, etc)
|
// Keep old logfiles (.001, .002, etc)
|
||||||
rotate bool
|
rotate bool
|
||||||
|
maxbackup int
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is the FileLogWriter's output method
|
// This is the FileLogWriter's output method
|
||||||
@@ -46,6 +47,7 @@ func (w *FileLogWriter) LogWrite(rec *LogRecord) {
|
|||||||
|
|
||||||
func (w *FileLogWriter) Close() {
|
func (w *FileLogWriter) Close() {
|
||||||
close(w.rec)
|
close(w.rec)
|
||||||
|
w.file.Sync()
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewFileLogWriter creates a new LogWriter which writes to the given file and
|
// NewFileLogWriter creates a new LogWriter which writes to the given file and
|
||||||
@@ -59,11 +61,12 @@ func (w *FileLogWriter) Close() {
|
|||||||
// [%D %T] [%L] (%S) %M
|
// [%D %T] [%L] (%S) %M
|
||||||
func NewFileLogWriter(fname string, rotate bool) *FileLogWriter {
|
func NewFileLogWriter(fname string, rotate bool) *FileLogWriter {
|
||||||
w := &FileLogWriter{
|
w := &FileLogWriter{
|
||||||
rec: make(chan *LogRecord, LogBufferLength),
|
rec: make(chan *LogRecord, LogBufferLength),
|
||||||
rot: make(chan bool),
|
rot: make(chan bool),
|
||||||
filename: fname,
|
filename: fname,
|
||||||
format: "[%D %T] [%L] (%S) %M",
|
format: "[%D %T] [%L] (%S) %M",
|
||||||
rotate: rotate,
|
rotate: rotate,
|
||||||
|
maxbackup: 999,
|
||||||
}
|
}
|
||||||
|
|
||||||
// open the file for the first time
|
// open the file for the first time
|
||||||
@@ -138,15 +141,30 @@ func (w *FileLogWriter) intRotate() error {
|
|||||||
// Find the next available number
|
// Find the next available number
|
||||||
num := 1
|
num := 1
|
||||||
fname := ""
|
fname := ""
|
||||||
for ; err == nil && num <= 999; num++ {
|
if w.daily && time.Now().Day() != w.daily_opendate {
|
||||||
fname = w.filename + fmt.Sprintf(".%03d", num)
|
yesterday := time.Now().AddDate(0, 0, -1).Format("2006-01-02")
|
||||||
_, err = os.Lstat(fname)
|
|
||||||
}
|
for ; err == nil && num <= 999; num++ {
|
||||||
// return error if the last file checked still existed
|
fname = w.filename + fmt.Sprintf(".%s.%03d", yesterday, num)
|
||||||
if err == nil {
|
_, err = os.Lstat(fname)
|
||||||
return fmt.Errorf("Rotate: Cannot find free log number to rename %s\n", w.filename)
|
}
|
||||||
|
// return error if the last file checked still existed
|
||||||
|
if err == nil {
|
||||||
|
return fmt.Errorf("Rotate: Cannot find free log number to rename %s\n", w.filename)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
num = w.maxbackup - 1
|
||||||
|
for ; num >= 1; num-- {
|
||||||
|
fname = w.filename + fmt.Sprintf(".%d", num)
|
||||||
|
nfname := w.filename + fmt.Sprintf(".%d", num+1)
|
||||||
|
_, err = os.Lstat(fname)
|
||||||
|
if err == nil {
|
||||||
|
os.Rename(fname, nfname)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
w.file.Close()
|
||||||
// Rename the file to its newfound home
|
// Rename the file to its newfound home
|
||||||
err = os.Rename(w.filename, fname)
|
err = os.Rename(w.filename, fname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -217,6 +235,13 @@ func (w *FileLogWriter) SetRotateDaily(daily bool) *FileLogWriter {
|
|||||||
return w
|
return w
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set max backup files. Must be called before the first log message
|
||||||
|
// is written.
|
||||||
|
func (w *FileLogWriter) SetRotateMaxBackup(maxbackup int) *FileLogWriter {
|
||||||
|
w.maxbackup = maxbackup
|
||||||
|
return w
|
||||||
|
}
|
||||||
|
|
||||||
// SetRotate changes whether or not the old logs are kept. (chainable) Must be
|
// SetRotate changes whether or not the old logs are kept. (chainable) Must be
|
||||||
// called before the first log message is written. If rotate is false, the
|
// called before the first log message is written. If rotate is false, the
|
||||||
// files are overwritten; otherwise, they are rotated to another file before the
|
// files are overwritten; otherwise, they are rotated to another file before the
|
||||||
32
Godeps/_workspace/src/code.google.com/p/log4go/log4go.go → Godeps/_workspace/src/github.com/alecthomas/log4go/log4go.go
сгенерированный
поставляемый
32
Godeps/_workspace/src/code.google.com/p/log4go/log4go.go → Godeps/_workspace/src/github.com/alecthomas/log4go/log4go.go
сгенерированный
поставляемый
@@ -47,11 +47,11 @@ package log4go
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"os"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"time"
|
"os"
|
||||||
"strings"
|
|
||||||
"runtime"
|
"runtime"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Version information
|
// Version information
|
||||||
@@ -65,10 +65,10 @@ const (
|
|||||||
/****** Constants ******/
|
/****** Constants ******/
|
||||||
|
|
||||||
// These are the integer logging levels used by the logger
|
// These are the integer logging levels used by the logger
|
||||||
type level int
|
type Level int
|
||||||
|
|
||||||
const (
|
const (
|
||||||
FINEST level = iota
|
FINEST Level = iota
|
||||||
FINE
|
FINE
|
||||||
DEBUG
|
DEBUG
|
||||||
TRACE
|
TRACE
|
||||||
@@ -83,7 +83,7 @@ var (
|
|||||||
levelStrings = [...]string{"FNST", "FINE", "DEBG", "TRAC", "INFO", "WARN", "EROR", "CRIT"}
|
levelStrings = [...]string{"FNST", "FINE", "DEBG", "TRAC", "INFO", "WARN", "EROR", "CRIT"}
|
||||||
)
|
)
|
||||||
|
|
||||||
func (l level) String() string {
|
func (l Level) String() string {
|
||||||
if l < 0 || int(l) > len(levelStrings) {
|
if l < 0 || int(l) > len(levelStrings) {
|
||||||
return "UNKNOWN"
|
return "UNKNOWN"
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ var (
|
|||||||
|
|
||||||
// A LogRecord contains all of the pertinent information for each message
|
// A LogRecord contains all of the pertinent information for each message
|
||||||
type LogRecord struct {
|
type LogRecord struct {
|
||||||
Level level // The log level
|
Level Level // The log level
|
||||||
Created time.Time // The time at which the log message was created (nanoseconds)
|
Created time.Time // The time at which the log message was created (nanoseconds)
|
||||||
Source string // The message source
|
Source string // The message source
|
||||||
Message string // The log message
|
Message string // The log message
|
||||||
@@ -124,7 +124,7 @@ type LogWriter interface {
|
|||||||
// A Filter represents the log level below which no log records are written to
|
// A Filter represents the log level below which no log records are written to
|
||||||
// the associated LogWriter.
|
// the associated LogWriter.
|
||||||
type Filter struct {
|
type Filter struct {
|
||||||
Level level
|
Level Level
|
||||||
LogWriter
|
LogWriter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -144,7 +144,7 @@ func NewLogger() Logger {
|
|||||||
// or above lvl to standard output.
|
// or above lvl to standard output.
|
||||||
//
|
//
|
||||||
// DEPRECATED: use NewDefaultLogger instead.
|
// DEPRECATED: use NewDefaultLogger instead.
|
||||||
func NewConsoleLogger(lvl level) Logger {
|
func NewConsoleLogger(lvl Level) Logger {
|
||||||
os.Stderr.WriteString("warning: use of deprecated NewConsoleLogger\n")
|
os.Stderr.WriteString("warning: use of deprecated NewConsoleLogger\n")
|
||||||
return Logger{
|
return Logger{
|
||||||
"stdout": &Filter{lvl, NewConsoleLogWriter()},
|
"stdout": &Filter{lvl, NewConsoleLogWriter()},
|
||||||
@@ -153,7 +153,7 @@ func NewConsoleLogger(lvl level) Logger {
|
|||||||
|
|
||||||
// Create a new logger with a "stdout" filter configured to send log messages at
|
// Create a new logger with a "stdout" filter configured to send log messages at
|
||||||
// or above lvl to standard output.
|
// or above lvl to standard output.
|
||||||
func NewDefaultLogger(lvl level) Logger {
|
func NewDefaultLogger(lvl Level) Logger {
|
||||||
return Logger{
|
return Logger{
|
||||||
"stdout": &Filter{lvl, NewConsoleLogWriter()},
|
"stdout": &Filter{lvl, NewConsoleLogWriter()},
|
||||||
}
|
}
|
||||||
@@ -174,14 +174,14 @@ func (log Logger) Close() {
|
|||||||
// Add a new LogWriter to the Logger which will only log messages at lvl or
|
// Add a new LogWriter to the Logger which will only log messages at lvl or
|
||||||
// higher. This function should not be called from multiple goroutines.
|
// higher. This function should not be called from multiple goroutines.
|
||||||
// Returns the logger for chaining.
|
// Returns the logger for chaining.
|
||||||
func (log Logger) AddFilter(name string, lvl level, writer LogWriter) Logger {
|
func (log Logger) AddFilter(name string, lvl Level, writer LogWriter) Logger {
|
||||||
log[name] = &Filter{lvl, writer}
|
log[name] = &Filter{lvl, writer}
|
||||||
return log
|
return log
|
||||||
}
|
}
|
||||||
|
|
||||||
/******* Logging *******/
|
/******* Logging *******/
|
||||||
// Send a formatted log message internally
|
// Send a formatted log message internally
|
||||||
func (log Logger) intLogf(lvl level, format string, args ...interface{}) {
|
func (log Logger) intLogf(lvl Level, format string, args ...interface{}) {
|
||||||
skip := true
|
skip := true
|
||||||
|
|
||||||
// Determine if any logging will be done
|
// Determine if any logging will be done
|
||||||
@@ -225,7 +225,7 @@ func (log Logger) intLogf(lvl level, format string, args ...interface{}) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send a closure log message internally
|
// Send a closure log message internally
|
||||||
func (log Logger) intLogc(lvl level, closure func() string) {
|
func (log Logger) intLogc(lvl Level, closure func() string) {
|
||||||
skip := true
|
skip := true
|
||||||
|
|
||||||
// Determine if any logging will be done
|
// Determine if any logging will be done
|
||||||
@@ -264,7 +264,7 @@ func (log Logger) intLogc(lvl level, closure func() string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Send a log message with manual level, source, and message.
|
// Send a log message with manual level, source, and message.
|
||||||
func (log Logger) Log(lvl level, source, message string) {
|
func (log Logger) Log(lvl Level, source, message string) {
|
||||||
skip := true
|
skip := true
|
||||||
|
|
||||||
// Determine if any logging will be done
|
// Determine if any logging will be done
|
||||||
@@ -297,13 +297,13 @@ func (log Logger) Log(lvl level, source, message string) {
|
|||||||
|
|
||||||
// Logf logs a formatted log message at the given log level, using the caller as
|
// Logf logs a formatted log message at the given log level, using the caller as
|
||||||
// its source.
|
// its source.
|
||||||
func (log Logger) Logf(lvl level, format string, args ...interface{}) {
|
func (log Logger) Logf(lvl Level, format string, args ...interface{}) {
|
||||||
log.intLogf(lvl, format, args...)
|
log.intLogf(lvl, format, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logc logs a string returned by the closure at the given log level, using the caller as
|
// Logc logs a string returned by the closure at the given log level, using the caller as
|
||||||
// its source. If no log message would be written, the closure is never called.
|
// its source. If no log message would be written, the closure is never called.
|
||||||
func (log Logger) Logc(lvl level, closure func() string) {
|
func (log Logger) Logc(lvl Level, closure func() string) {
|
||||||
log.intLogc(lvl, closure)
|
log.intLogc(lvl, closure)
|
||||||
}
|
}
|
||||||
|
|
||||||
8
Godeps/_workspace/src/code.google.com/p/log4go/pattlog.go → Godeps/_workspace/src/github.com/alecthomas/log4go/pattlog.go
сгенерированный
поставляемый
8
Godeps/_workspace/src/code.google.com/p/log4go/pattlog.go → Godeps/_workspace/src/github.com/alecthomas/log4go/pattlog.go
сгенерированный
поставляемый
@@ -3,9 +3,10 @@
|
|||||||
package log4go
|
package log4go
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"bytes"
|
"bytes"
|
||||||
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@@ -51,7 +52,7 @@ func FormatLogRecord(format string, rec *LogRecord) string {
|
|||||||
updated := &formatCacheType{
|
updated := &formatCacheType{
|
||||||
LastUpdateSeconds: secs,
|
LastUpdateSeconds: secs,
|
||||||
shortTime: fmt.Sprintf("%02d:%02d", hour, minute),
|
shortTime: fmt.Sprintf("%02d:%02d", hour, minute),
|
||||||
shortDate: fmt.Sprintf("%02d/%02d/%02d", month, day, year%100),
|
shortDate: fmt.Sprintf("%02d/%02d/%02d", day, month, year%100),
|
||||||
longTime: fmt.Sprintf("%02d:%02d:%02d %s", hour, minute, second, zone),
|
longTime: fmt.Sprintf("%02d:%02d:%02d %s", hour, minute, second, zone),
|
||||||
longDate: fmt.Sprintf("%04d/%02d/%02d", year, month, day),
|
longDate: fmt.Sprintf("%04d/%02d/%02d", year, month, day),
|
||||||
}
|
}
|
||||||
@@ -78,6 +79,9 @@ func FormatLogRecord(format string, rec *LogRecord) string {
|
|||||||
out.WriteString(levelStrings[rec.Level])
|
out.WriteString(levelStrings[rec.Level])
|
||||||
case 'S':
|
case 'S':
|
||||||
out.WriteString(rec.Source)
|
out.WriteString(rec.Source)
|
||||||
|
case 's':
|
||||||
|
slice := strings.Split(rec.Source, "/")
|
||||||
|
out.WriteString(slice[len(slice)-1])
|
||||||
case 'M':
|
case 'M':
|
||||||
out.WriteString(rec.Message)
|
out.WriteString(rec.Message)
|
||||||
}
|
}
|
||||||
0
Godeps/_workspace/src/code.google.com/p/log4go/socklog.go → Godeps/_workspace/src/github.com/alecthomas/log4go/socklog.go
сгенерированный
поставляемый
0
Godeps/_workspace/src/code.google.com/p/log4go/socklog.go → Godeps/_workspace/src/github.com/alecthomas/log4go/socklog.go
сгенерированный
поставляемый
49
Godeps/_workspace/src/github.com/alecthomas/log4go/termlog.go
сгенерированный
поставляемый
Обычный файл
49
Godeps/_workspace/src/github.com/alecthomas/log4go/termlog.go
сгенерированный
поставляемый
Обычный файл
@@ -0,0 +1,49 @@
|
|||||||
|
// Copyright (C) 2010, Kyle Lemons <kyle@kylelemons.net>. All rights reserved.
|
||||||
|
|
||||||
|
package log4go
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var stdout io.Writer = os.Stdout
|
||||||
|
|
||||||
|
// This is the standard writer that prints to standard output.
|
||||||
|
type ConsoleLogWriter struct {
|
||||||
|
format string
|
||||||
|
w chan *LogRecord
|
||||||
|
}
|
||||||
|
|
||||||
|
// This creates a new ConsoleLogWriter
|
||||||
|
func NewConsoleLogWriter() *ConsoleLogWriter {
|
||||||
|
consoleWriter := &ConsoleLogWriter{
|
||||||
|
format: "[%T %D] [%L] (%S) %M",
|
||||||
|
w: make(chan *LogRecord, LogBufferLength),
|
||||||
|
}
|
||||||
|
go consoleWriter.run(stdout)
|
||||||
|
return consoleWriter
|
||||||
|
}
|
||||||
|
func (c *ConsoleLogWriter) SetFormat(format string) {
|
||||||
|
c.format = format
|
||||||
|
}
|
||||||
|
func (c *ConsoleLogWriter) run(out io.Writer) {
|
||||||
|
for rec := range c.w {
|
||||||
|
fmt.Fprint(out, FormatLogRecord(c.format, rec))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// This is the ConsoleLogWriter's output method. This will block if the output
|
||||||
|
// buffer is full.
|
||||||
|
func (c *ConsoleLogWriter) LogWrite(rec *LogRecord) {
|
||||||
|
c.w <- rec
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close stops the logger from sending messages to standard output. Attempts to
|
||||||
|
// send log messages to this logger after a Close have undefined behavior.
|
||||||
|
func (c *ConsoleLogWriter) Close() {
|
||||||
|
close(c.w)
|
||||||
|
time.Sleep(50 * time.Millisecond) // Try to give console I/O time to complete
|
||||||
|
}
|
||||||
10
Godeps/_workspace/src/code.google.com/p/log4go/wrapper.go → Godeps/_workspace/src/github.com/alecthomas/log4go/wrapper.go
сгенерированный
поставляемый
10
Godeps/_workspace/src/code.google.com/p/log4go/wrapper.go → Godeps/_workspace/src/github.com/alecthomas/log4go/wrapper.go
сгенерированный
поставляемый
@@ -4,8 +4,8 @@ package log4go
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"os"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ func LoadConfiguration(filename string) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Wrapper for (*Logger).AddFilter
|
// Wrapper for (*Logger).AddFilter
|
||||||
func AddFilter(name string, lvl level, writer LogWriter) {
|
func AddFilter(name string, lvl Level, writer LogWriter) {
|
||||||
Global.AddFilter(name, lvl, writer)
|
Global.AddFilter(name, lvl, writer)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,19 +88,19 @@ func Stdoutf(format string, args ...interface{}) {
|
|||||||
|
|
||||||
// Send a log message manually
|
// Send a log message manually
|
||||||
// Wrapper for (*Logger).Log
|
// Wrapper for (*Logger).Log
|
||||||
func Log(lvl level, source, message string) {
|
func Log(lvl Level, source, message string) {
|
||||||
Global.Log(lvl, source, message)
|
Global.Log(lvl, source, message)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send a formatted log message easily
|
// Send a formatted log message easily
|
||||||
// Wrapper for (*Logger).Logf
|
// Wrapper for (*Logger).Logf
|
||||||
func Logf(lvl level, format string, args ...interface{}) {
|
func Logf(lvl Level, format string, args ...interface{}) {
|
||||||
Global.intLogf(lvl, format, args...)
|
Global.intLogf(lvl, format, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send a closure log message
|
// Send a closure log message
|
||||||
// Wrapper for (*Logger).Logc
|
// Wrapper for (*Logger).Logc
|
||||||
func Logc(lvl level, closure func() string) {
|
func Logc(lvl Level, closure func() string) {
|
||||||
Global.intLogc(lvl, closure)
|
Global.intLogc(lvl, closure)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -9,7 +9,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ package api
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/utils"
|
"github.com/mattermost/platform/utils"
|
||||||
"html/template"
|
"html/template"
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/utils"
|
"github.com/mattermost/platform/utils"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/store"
|
"github.com/mattermost/platform/store"
|
||||||
"github.com/mattermost/platform/utils"
|
"github.com/mattermost/platform/utils"
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ package api
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/disintegration/imaging"
|
"github.com/disintegration/imaging"
|
||||||
"github.com/goamz/goamz/aws"
|
"github.com/goamz/goamz/aws"
|
||||||
"github.com/goamz/goamz/s3"
|
"github.com/goamz/goamz/s3"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/utils"
|
"github.com/mattermost/platform/utils"
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/store"
|
"github.com/mattermost/platform/store"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/braintree/manners"
|
"github.com/braintree/manners"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/mattermost/platform/store"
|
"github.com/mattermost/platform/store"
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ package api
|
|||||||
import (
|
import (
|
||||||
"archive/zip"
|
"archive/zip"
|
||||||
"bytes"
|
"bytes"
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"io"
|
"io"
|
||||||
"mime/multipart"
|
"mime/multipart"
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ package api
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/store"
|
"github.com/mattermost/platform/store"
|
||||||
|
|||||||
@@ -5,9 +5,9 @@ package api
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
b64 "encoding/base64"
|
b64 "encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/disintegration/imaging"
|
"github.com/disintegration/imaging"
|
||||||
"github.com/golang/freetype"
|
"github.com/golang/freetype"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/store"
|
"github.com/mattermost/platform/store"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/utils"
|
"github.com/mattermost/platform/utils"
|
||||||
|
|||||||
@@ -12,10 +12,10 @@
|
|||||||
"EnableTesting": false,
|
"EnableTesting": false,
|
||||||
"EnableDeveloper": false,
|
"EnableDeveloper": false,
|
||||||
"EnableSecurityFixAlert": true,
|
"EnableSecurityFixAlert": true,
|
||||||
"SessionLengthWebInDays" : 30,
|
"SessionLengthWebInDays": 30,
|
||||||
"SessionLengthMobileInDays" : 30,
|
"SessionLengthMobileInDays": 30,
|
||||||
"SessionLengthSSOInDays" : 30,
|
"SessionLengthSSOInDays": 30,
|
||||||
"SessionCacheInMinutes" : 10
|
"SessionCacheInMinutes": 10
|
||||||
},
|
},
|
||||||
"TeamSettings": {
|
"TeamSettings": {
|
||||||
"SiteName": "Mattermost",
|
"SiteName": "Mattermost",
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package manualtesting
|
package manualtesting
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/api"
|
"github.com/mattermost/platform/api"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/utils"
|
"github.com/mattermost/platform/utils"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package manualtesting
|
package manualtesting
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/api"
|
"github.com/mattermost/platform/api"
|
||||||
"github.com/mattermost/platform/manualtesting"
|
"github.com/mattermost/platform/manualtesting"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
|
|||||||
@@ -5,8 +5,8 @@ package model
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/go-gorp/gorp"
|
"github.com/go-gorp/gorp"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"github.com/mattermost/platform/utils"
|
"github.com/mattermost/platform/utils"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@
|
|||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"crypto/aes"
|
"crypto/aes"
|
||||||
"crypto/cipher"
|
"crypto/cipher"
|
||||||
"crypto/hmac"
|
"crypto/hmac"
|
||||||
@@ -16,6 +15,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"io"
|
"io"
|
||||||
sqltrace "log"
|
sqltrace "log"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
l4g "code.google.com/p/log4go"
|
l4g "github.com/alecthomas/log4go"
|
||||||
|
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
)
|
)
|
||||||
@@ -77,7 +77,9 @@ func configureLog(s *model.LogSettings) {
|
|||||||
level = l4g.ERROR
|
level = l4g.ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
l4g.AddFilter("stdout", level, l4g.NewConsoleLogWriter())
|
lw := l4g.NewConsoleLogWriter()
|
||||||
|
lw.SetFormat("[%D %T] [%L] %M")
|
||||||
|
l4g.AddFilter("stdout", level, lw)
|
||||||
}
|
}
|
||||||
|
|
||||||
if s.EnableFile {
|
if s.EnableFile {
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
package utils
|
package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
"encoding/base64"
|
"encoding/base64"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
"net"
|
"net"
|
||||||
"net/mail"
|
"net/mail"
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
package web
|
package web
|
||||||
|
|
||||||
import (
|
import (
|
||||||
l4g "code.google.com/p/log4go"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
|
l4g "github.com/alecthomas/log4go"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
"github.com/mattermost/platform/api"
|
"github.com/mattermost/platform/api"
|
||||||
"github.com/mattermost/platform/model"
|
"github.com/mattermost/platform/model"
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user