4242 registerServiceFlag bool
4343 unregisterServiceFlag bool
4444 runServiceFlag bool
45+ logFileFlag string
4546
4647 kernel32 = windows .NewLazySystemDLL ("kernel32.dll" )
4748 setStdHandle = kernel32 .NewProc ("SetStdHandle" )
@@ -52,14 +53,16 @@ var (
5253 service * handler
5354)
5455
56+ const defaultServiceName = "containerd"
57+
5558// serviceFlags returns an array of flags for configuring containerd to run
5659// as a Windows service under control of SCM.
5760func serviceFlags () []cli.Flag {
5861 return []cli.Flag {
5962 cli.StringFlag {
6063 Name : "service-name" ,
6164 Usage : "Set the Windows service name" ,
62- Value : "containerd" ,
65+ Value : defaultServiceName ,
6366 },
6467 cli.BoolFlag {
6568 Name : "register-service" ,
@@ -74,14 +77,18 @@ func serviceFlags() []cli.Flag {
7477 Usage : "" ,
7578 Hidden : true ,
7679 },
80+ cli.StringFlag {
81+ Name : "log-file" ,
82+ Usage : "Path to the containerd log file" ,
83+ },
7784 }
7885}
7986
8087// applyPlatformFlags applies platform-specific flags.
8188func applyPlatformFlags (context * cli.Context ) {
82-
83- if s := context . GlobalString ( "service-name" ); s ! = "" {
84- serviceNameFlag = s
89+ serviceNameFlag = context . GlobalString ( "service-name" )
90+ if serviceNameFlag = = "" {
91+ serviceNameFlag = defaultServiceName
8592 }
8693 for _ , v := range []struct {
8794 name string
@@ -102,6 +109,7 @@ func applyPlatformFlags(context *cli.Context) {
102109 } {
103110 * v .d = context .GlobalBool (v .name )
104111 }
112+ logFileFlag = context .GlobalString ("log-file" )
105113}
106114
107115type handler struct {
@@ -243,7 +251,15 @@ func registerUnregisterService(root string) (bool, error) {
243251 return true , err
244252 }
245253
246- logrus .SetOutput (ioutil .Discard )
254+ logOutput := ioutil .Discard
255+ if logFileFlag != "" {
256+ f , err := os .OpenFile (logFileFlag , os .O_APPEND | os .O_CREATE | os .O_WRONLY , 0644 )
257+ if err != nil {
258+ return true , errors .Wrapf (err , "open log file %q" , logFileFlag )
259+ }
260+ logOutput = f
261+ }
262+ logrus .SetOutput (logOutput )
247263 }
248264 return false , nil
249265}
0 commit comments