...

Source file src/github.com/Microsoft/go-winio/pkg/etw/sample/main_windows.go

Documentation: github.com/Microsoft/go-winio/pkg/etw/sample

     1  //go:build windows
     2  // +build windows
     3  
     4  // Shows a sample usage of the ETW logging package.
     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