1
2
3
4
5 package main
6
7 import (
8 "bufio"
9 "fmt"
10 "log"
11 "os"
12 "runtime"
13
14 "github.com/Microsoft/go-winio/pkg/etw"
15 "github.com/Microsoft/go-winio/pkg/guid"
16 )
17
18 func callback(sourceID guid.GUID, state etw.ProviderState, level etw.Level, matchAnyKeyword uint64, matchAllKeyword uint64, filterData uintptr) {
19 fmt.Printf("Callback: isEnabled=%d, level=%d, matchAnyKeyword=%d\n", state, level, matchAnyKeyword)
20 }
21
22 func main() {
23 fmt.Printf("Running on %s/%s\n", runtime.GOOS, runtime.GOARCH)
24
25 group, err := guid.FromString("12341234-abcd-abcd-abcd-123412341234")
26 if err != nil {
27 log.Fatal(err)
28 }
29
30 provider, err := etw.NewProvider("TestProvider", callback)
31
32 if err != nil {
33 log.Fatal(err)
34 }
35 defer func() {
36 if err := provider.Close(); err != nil {
37 log.Fatal(err)
38 }
39 }()
40
41 providerWithGroup, err := etw.NewProviderWithOptions("TestProviderWithGroup", etw.WithGroup(group), etw.WithCallback(callback))
42
43 if err != nil {
44 log.Fatal(err)
45 }
46 defer func() {
47 if err := providerWithGroup.Close(); err != nil {
48 log.Fatal(err)
49 }
50 }()
51
52 fmt.Printf("Provider ID: %s\n", provider)
53 fmt.Printf("Provider w/ Group ID: %s\n", providerWithGroup)
54
55 reader := bufio.NewReader(os.Stdin)
56
57 fmt.Println("Press enter to log events")
58 reader.ReadString('\n')
59
60 if err := provider.WriteEvent(
61 "TestEvent",
62 etw.WithEventOpts(
63 etw.WithLevel(etw.LevelInfo),
64 etw.WithKeyword(0x140),
65 ),
66 etw.WithFields(
67 etw.StringField("TestField", "Foo"),
68 etw.StringField("TestField2", "Bar"),
69 etw.Struct("TestStruct",
70 etw.StringField("Field1", "Value1"),
71 etw.StringField("Field2", "Value2")),
72 etw.StringArray("TestArray", []string{
73 "Item1",
74 "Item2",
75 "Item3",
76 "Item4",
77 "Item5",
78 })),
79 ); err != nil {
80 log.Fatal(err)
81 }
82
83 if err := providerWithGroup.WriteEvent(
84 "TestEventWithGroup",
85 etw.WithEventOpts(
86 etw.WithLevel(etw.LevelInfo),
87 etw.WithKeyword(0x140),
88 ),
89 etw.WithFields(
90 etw.StringField("TestField", "Foo"),
91 etw.StringField("TestField2", "Bar"),
92 etw.Struct("TestStruct",
93 etw.StringField("Field1", "Value1"),
94 etw.StringField("Field2", "Value2")),
95 etw.StringArray("TestArray", []string{
96 "Item1",
97 "Item2",
98 "Item3",
99 "Item4",
100 "Item5",
101 })),
102 ); err != nil {
103 log.Fatal(err)
104 }
105 }
106
View as plain text