web-dev-qa-db-ja.com

ログを使用せずにGoでStderrに印刷するにはどうすればよいですか

logを使用せずにStderrにメッセージを書き込むにはどうすればよいですか?

このSO投稿のコメントloglog.Println("Message")でそれを行う方法を示していますが、タイムスタンプが必要ない場合はどうなりますか?

次の良い囲Isはありますか?

os.Stderr.WriteString("Message")

54
Max Heiber

タイムスタンプが必要ない場合は、flaglog.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)
77
Ainar-G

fmtパッケージを使用すると、stderrにこの方法で書き込むことを選択できます。

import "fmt"
import "os"

func main() {
    fmt.Fprintln(os.Stderr, "hello world")
}
56
julienc

os.Stderrio.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 として持っている場合、バイトスライスとして持っている場合...) )。そして、もっと多くの方法があります。

12
cd1

デフォルトでは、ロガーフラグは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)
5
Gus E

setOutput関数を使用して、出力ストリームをos.Stdoutに設定します

import (
    "log"
    "os"
)

func init() {
    log.SetOutput(os.Stdout)
}

func main() {
    log.Println("Gene Story SNP File Storage Server Started.")
}
0
Max