質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

1回答

617閲覧

【Go】ログファイルを作成する途中で行っている処理が分からない。os io log パッケージに関して / io.MultiWriter, log.SetFlags log.SetOutputなど

nyako

総合スコア45

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2022/01/17 05:44

以下のようなコードでエラーログを別途ファイルに書き込む関数を用意します。

とある教材を参考にしているのですが(そこでは質問出来ない),
LoggingSetting関数処理内の語尾に, それぞれ僕が書いたコメントアウトがそれぞれ何をしているのか知りたいです。

①〜④のご回答を頂けたら幸いです。。

Go

1 2func LoggingSetting(logFile string){ 3 4 logfile, _ := os.OpenFile(logFile, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666) // ① どのように何を開くか 5 6 multiLogFile := io.MultiWriter(os.Stdout, logfile) // ② これはなにをしているのかドキュメントを確認しても理解できません。io.Writerを戻り値として返すの意味が分かってないです。 7 8 log.SetFlags(log.Ldate | log.Ltime | log.Lshortfile) // ③ どのようにログに書くかフラグをセットする? + この関数を実行するだけで実際にlogfileを引数にとらなくても良いのでしょうか? 9 10 log.SetOutput(multiLogFile) // ④ io.Writer?を引数にとって, 実際に書き込む処理をしているのでしょうか。 11 12} 13 14func main() { 15 LoggingSetting("aaaa.log") 16 _, err := os.Open("aaa.txt") 17 if err != nil { 18 log.Fatalln("error!", err) 19 } 20} 21

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

①:無いファイルは作りつつあれば追記型として読み書き可能なファイルをオープンしています。
②:ひとつ書き込むと複数の出力先に書き込むオブジェクトを作っています。ここでは標準出力とファイルに対し同じ内容を出力します。
③:その解釈の前半はあっていて、後半のlogfile云々は④で行いますのでここでは行いませんし、標準出力とlogfileをラップした②を出力対象とすれば標準出力にもlogfileにも同じ内容が出力されるのでこの後あなたが記述するコードでlogfileに触れるのはプログラム終了時に閉じる時だけです。
④:ログ出力先として②をセットします。(セットするだけで実際に②が使われるのはlog出力関数が呼ばれた時です)

投稿2022/01/17 10:55

nobonobo

総合スコア3367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問