github.com/vmware/govmomi@v0.43.0/govc/logs/command.go (about) 1 /* 2 Copyright (c) 2015-2016 VMware, Inc. All Rights Reserved. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package logs 18 19 import ( 20 "context" 21 "flag" 22 "time" 23 24 "github.com/vmware/govmomi/govc/cli" 25 "github.com/vmware/govmomi/govc/flags" 26 "github.com/vmware/govmomi/object" 27 ) 28 29 type logs struct { 30 *flags.HostSystemFlag 31 32 Max int32 33 Key string 34 35 follow bool 36 } 37 38 func init() { 39 cli.Register("logs", &logs{}) 40 } 41 42 func (cmd *logs) Register(ctx context.Context, f *flag.FlagSet) { 43 cmd.HostSystemFlag, ctx = flags.NewHostSystemFlag(ctx) 44 cmd.HostSystemFlag.Register(ctx, f) 45 46 cmd.Max = 25 // default 47 f.Var(flags.NewInt32(&cmd.Max), "n", "Output the last N log lines") 48 f.StringVar(&cmd.Key, "log", "", "Log file key") 49 f.BoolVar(&cmd.follow, "f", false, "Follow log file changes") 50 } 51 52 func (cmd *logs) Process(ctx context.Context) error { 53 if err := cmd.HostSystemFlag.Process(ctx); err != nil { 54 return err 55 } 56 return nil 57 } 58 59 func (cmd *logs) Description() string { 60 return `View VPX and ESX logs. 61 62 The '-log' option defaults to "hostd" when connected directly to a host or 63 when connected to VirtualCenter and a '-host' option is given. Otherwise, 64 the '-log' option defaults to "vpxd:vpxd.log". The '-host' option is ignored 65 when connected directly to a host. See 'govc logs.ls' for other '-log' options. 66 67 Examples: 68 govc logs -n 1000 -f 69 govc logs -host esx1 70 govc logs -host esx1 -log vmkernel` 71 } 72 73 func (cmd *logs) Run(ctx context.Context, f *flag.FlagSet) error { 74 c, err := cmd.Client() 75 if err != nil { 76 return err 77 } 78 79 defaultKey := "hostd" 80 var host *object.HostSystem 81 82 if c.IsVC() { 83 host, err = cmd.HostSystemIfSpecified() 84 if err != nil { 85 return err 86 } 87 88 if host == nil { 89 defaultKey = "vpxd:vpxd.log" 90 } 91 } 92 93 m := object.NewDiagnosticManager(c) 94 95 key := cmd.Key 96 if key == "" { 97 key = defaultKey 98 } 99 100 l := m.Log(ctx, host, key) 101 102 err = l.Seek(ctx, cmd.Max) 103 if err != nil { 104 return err 105 } 106 107 for { 108 _, err = l.Copy(ctx, cmd.Out) 109 if err != nil { 110 return nil 111 } 112 113 if !cmd.follow { 114 break 115 } 116 117 <-time.After(time.Second) 118 } 119 120 return nil 121 }