| package command | |
| import ( | |
| "context" | |
| "io" | |
| "github.com/Microsoft/go-winio/pkg/etwlogrus" | |
| "github.com/containerd/log" | |
| ) | |
| func runDaemon(ctx context.Context, cli *daemonCLI) error { | |
| // On Windows, this may be launching as a service or with an option to | |
| // register the service. | |
| stop, runAsService, err := initService(ctx, cli) | |
| if err != nil { | |
| return err | |
| } | |
| if stop { | |
| return nil | |
| } | |
| if runAsService { | |
| // If Windows SCM manages the service - no need for PID files | |
| cli.Config.Pidfile = "" | |
| } | |
| err = cli.start(ctx) | |
| notifyShutdown(ctx, err) | |
| return err | |
| } | |
| func initLogging(stdout, _ io.Writer) { | |
| // Maybe there is a historic reason why on non-Windows, stderr is used | |
| // for output. However, on Windows it makes no sense and there is no need. | |
| log.L.Logger.SetOutput(stdout) | |
| // Provider ID: {6996f090-c5de-5082-a81e-5841acc3a635} | |
| // Hook isn't closed explicitly, as it will exist until process exit. | |
| // GUID is generated based on name - see Microsoft/go-winio/tools/etw-provider-gen. | |
| if hook, err := etwlogrus.NewHook("Moby"); err == nil { | |
| log.L.Logger.AddHook(hook) | |
| } | |
| return | |
| } |