summaryrefslogtreecommitdiff
path: root/cmds/buttonAsPlugin/log.go
blob: 642ff7be2f33dae50a3ac63398fd56f94fa48daa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// This creates a simple hello world window
package main

import 	(
	"log"
	"fmt"
	"os"
	"io"
	"time"
	"bufio"
	arg "github.com/alexflint/go-arg"
)


var args struct {
	Foo string
	Bar bool
	User string `arg:"env:USER"`
	Demo bool `help:"run a demo"`
}

var f1 *os.File
var f2 *os.File
var err error

func init() {
	arg.MustParse(&args)
	fmt.Println(args.Foo, args.Bar, args.User)

	f1, err = os.OpenFile("/tmp/guilogfile", os.O_RDWR | os.O_CREATE | os.O_APPEND, 0666)
	if err != nil {
		log.Fatalf("error opening file: %v", err)
	}
	// hmm. is there a trick here or must this be in main()
	// defer f.Close()

	log.SetOutput(f1)
	log.Println("This is a test log entry")
}

func captureSTDOUT() {
	f2, _ = os.OpenFile("/tmp/my.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0664)
	multiWriter := io.MultiWriter(os.Stderr, f2)
	rd, wr, err := os.Pipe()
	if err != nil {
	    os.Exit(1)
	}

	// overwrite os.Stdout
	os.Stderr = wr

	go func() {
	    scanner := bufio.NewScanner(rd)
	    for scanner.Scan() {
	        stdoutLine := scanner.Text()
	        multiWriter.Write([]byte(stdoutLine + "\n"))
	    }
	}()

	fmt.Println("foobar")

	// hacky sleep to ensure the go routine can write before program exits
	time.Sleep(time.Second)
}