Skip to content

Commit 5023d96

Browse files
committed
Remove Windows EventLog logging hook
EventLog is very old and provides a poor experience. We have supported ETW for logging for a while, which is much better. We have also observed an issue where EventLog keeps containerd.exe open, preventing containerd from being upgraded to a new version. Due to all of this, it makes sense to remove the old EventLog hook in favor of using ETW logging on Windows as the primary diagnostic experience. Signed-off-by: Kevin Parsons <[email protected]>
1 parent 6cb56bb commit 5023d96

1 file changed

Lines changed: 1 addition & 117 deletions

File tree

cmd/containerd/command/service_windows.go

Lines changed: 1 addition & 117 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package command
1818

1919
import (
20-
"bytes"
2120
"fmt"
2221
"io/ioutil"
2322
"log"
@@ -35,7 +34,6 @@ import (
3534
"golang.org/x/sys/windows"
3635
"golang.org/x/sys/windows/svc"
3736
"golang.org/x/sys/windows/svc/debug"
38-
"golang.org/x/sys/windows/svc/eventlog"
3937
"golang.org/x/sys/windows/svc/mgr"
4038
)
4139

@@ -54,18 +52,6 @@ var (
5452
service *handler
5553
)
5654

57-
const (
58-
// These should match the values in event_messages.mc.
59-
eventInfo = 1
60-
eventWarn = 1
61-
eventError = 1
62-
eventDebug = 2
63-
eventPanic = 3
64-
eventFatal = 4
65-
66-
eventExtraOffset = 10 // Add this to any event to get a string that supports extended data
67-
)
68-
6955
// serviceFlags returns an array of flags for configuring containerd to run
7056
// as a Windows service under control of SCM.
7157
func serviceFlags() []cli.Flag {
@@ -124,93 +110,6 @@ type handler struct {
124110
done chan struct{} // Indicates back to app main to quit
125111
}
126112

127-
type etwHook struct {
128-
log *eventlog.Log
129-
}
130-
131-
func (h *etwHook) Levels() []logrus.Level {
132-
return []logrus.Level{
133-
logrus.PanicLevel,
134-
logrus.FatalLevel,
135-
logrus.ErrorLevel,
136-
logrus.WarnLevel,
137-
logrus.InfoLevel,
138-
logrus.DebugLevel,
139-
}
140-
}
141-
142-
func (h *etwHook) Fire(e *logrus.Entry) error {
143-
var (
144-
etype uint16
145-
eid uint32
146-
)
147-
148-
switch e.Level {
149-
case logrus.PanicLevel:
150-
etype = windows.EVENTLOG_ERROR_TYPE
151-
eid = eventPanic
152-
case logrus.FatalLevel:
153-
etype = windows.EVENTLOG_ERROR_TYPE
154-
eid = eventFatal
155-
case logrus.ErrorLevel:
156-
etype = windows.EVENTLOG_ERROR_TYPE
157-
eid = eventError
158-
case logrus.WarnLevel:
159-
etype = windows.EVENTLOG_WARNING_TYPE
160-
eid = eventWarn
161-
case logrus.InfoLevel:
162-
etype = windows.EVENTLOG_INFORMATION_TYPE
163-
eid = eventInfo
164-
case logrus.DebugLevel:
165-
etype = windows.EVENTLOG_INFORMATION_TYPE
166-
eid = eventDebug
167-
default:
168-
return errors.Wrap(errdefs.ErrInvalidArgument, "unknown level")
169-
}
170-
171-
// If there is additional data, include it as a second string.
172-
exts := ""
173-
if len(e.Data) > 0 {
174-
fs := bytes.Buffer{}
175-
for k, v := range e.Data {
176-
fs.WriteString(k)
177-
fs.WriteByte('=')
178-
fmt.Fprint(&fs, v)
179-
fs.WriteByte(' ')
180-
}
181-
182-
exts = fs.String()[:fs.Len()-1]
183-
eid += eventExtraOffset
184-
}
185-
186-
if h.log == nil {
187-
fmt.Fprintf(os.Stderr, "%s [%s]\n", e.Message, exts)
188-
return nil
189-
}
190-
191-
var (
192-
ss [2]*uint16
193-
err error
194-
)
195-
196-
ss[0], err = windows.UTF16PtrFromString(e.Message)
197-
if err != nil {
198-
return err
199-
}
200-
201-
count := uint16(1)
202-
if exts != "" {
203-
ss[1], err = windows.UTF16PtrFromString(exts)
204-
if err != nil {
205-
return err
206-
}
207-
208-
count++
209-
}
210-
211-
return windows.ReportEvent(h.log.Handle, etype, 0, eid, 0, count, 0, &ss[0], nil)
212-
}
213-
214113
func getServicePath() (string, error) {
215114
p, err := exec.LookPath(os.Args[0])
216115
if err != nil {
@@ -283,7 +182,7 @@ func registerService() error {
283182
return err
284183
}
285184

286-
return eventlog.Install(serviceNameFlag, p, false, eventlog.Info|eventlog.Warning|eventlog.Error)
185+
return nil
287186
}
288187

289188
func unregisterService() error {
@@ -299,7 +198,6 @@ func unregisterService() error {
299198
}
300199
defer s.Close()
301200

302-
eventlog.Remove(serviceNameFlag)
303201
err = s.Delete()
304202
if err != nil {
305203
return err
@@ -345,20 +243,6 @@ func registerUnregisterService(root string) (bool, error) {
345243
return true, err
346244
}
347245

348-
interactive, err := svc.IsAnInteractiveSession()
349-
if err != nil {
350-
return true, err
351-
}
352-
353-
var log *eventlog.Log
354-
if !interactive {
355-
log, err = eventlog.Open(serviceNameFlag)
356-
if err != nil {
357-
return true, err
358-
}
359-
}
360-
361-
logrus.AddHook(&etwHook{log})
362246
logrus.SetOutput(ioutil.Discard)
363247
}
364248
return false, nil

0 commit comments

Comments
 (0)