log
を使用せずにStderrにメッセージを書き込むにはどうすればよいですか?
このSO投稿のコメント はlog
:log.Println("Message")
でそれを行う方法を示していますが、タイムスタンプが必要ない場合はどうなりますか?
次の良い囲Isはありますか?
os.Stderr.WriteString("Message")
タイムスタンプが必要ない場合は、flag
をlog.Logger
に設定して、新しい 0
を作成します。
l := log.New(os.Stderr, "", 0)
l.Println("log msg")
編集:
次の良い囲Isはありますか?
os.Stderr.WriteString("Message")
これは許容範囲であり、 fmt.Fprintf
および友人を使用して、フォーマットされた出力を取得することもできます。
fmt.Fprintf(os.Stderr, "number of foo: %d", nFoo)
fmt
パッケージを使用すると、stderr
にこの方法で書き込むことを選択できます。
import "fmt"
import "os"
func main() {
fmt.Fprintln(os.Stderr, "hello world")
}
os.Stderr
は io.Writer
であるため、io.Writer
を受け入れる任意の関数で使用できます。以下に例を示します。
str := "Message"
fmt.Fprintln(os.Stderr, str)
io.WriteString(os.Stderr, str)
io.Copy(os.Stderr, bytes.NewBufferString(str))
os.Stderr.Write([]byte(str))
それはすべて、印刷したい文字列の正確さに依存します(つまり、最初にフォーマットしたい場合、 io.Reader
として持っている場合、バイトスライスとして持っている場合...) )。そして、もっと多くの方法があります。
デフォルトでは、ロガーフラグはLdate | Ltime
に設定されます。ロガー形式は、次のいずれかに変更できます( golang log documentation から):
Ldate = 1 << iota // the date in the local time zone: 2009/01/23
Ltime // the time in the local time zone: 01:23:23
Lmicroseconds // microsecond resolution: 01:23:23.123123. assumes Ltime.
Llongfile // full file name and line number: /a/b/c/d.go:23
Lshortfile // final file name element and line number: d.go:23. overrides Llongfile
LUTC // if Ldate or Ltime is set, use UTC rather than the local time zone
LstdFlags = Ldate | Ltime // initial values for the standard logger
たとえば、フラグLdate | Ltime(またはLstdFlags)プロデュース、
2009/01/23 01:23:23 message
WhileフラグLdate | Ltime | Lマイクロ秒| Llongfileプロデュース、
2009/01/23 01:23:23.123123 /a/b/c/d.go:23: message
フラグを0に設定することにより、デフォルトのロガーが何も印刷しないように設定することもできます。
log.SetFlags(0)
setOutput関数を使用して、出力ストリームをos.Stdoutに設定します
import (
"log"
"os"
)
func init() {
log.SetOutput(os.Stdout)
}
func main() {
log.Println("Gene Story SNP File Storage Server Started.")
}