func (p *Pod) getLogger(daemon *Daemon) (err error) { if p.spec.LogConfig.Type == "" { p.spec.LogConfig.Type = daemon.DefaultLog.Type p.spec.LogConfig.Config = daemon.DefaultLog.Config } if p.spec.LogConfig.Type == "none" { return nil } var ( needLogger []int = []int{} creator logger.Creator ) for i, c := range p.status.Containers { if c.Logs.Driver == nil { needLogger = append(needLogger, i) } } if len(needLogger) == 0 && p.status.Status == types.S_POD_RUNNING { return nil } if err = logger.ValidateLogOpts(p.spec.LogConfig.Type, p.spec.LogConfig.Config); err != nil { return } creator, err = logger.GetLogDriver(p.spec.LogConfig.Type) if err != nil { return } glog.V(1).Infof("configuring log driver [%s] for %s", p.spec.LogConfig.Type, p.id) for i, c := range p.status.Containers { ctx := logger.Context{ Config: p.spec.LogConfig.Config, ContainerID: c.Id, ContainerName: c.Name, ContainerImageName: p.spec.Containers[i].Image, ContainerCreated: time.Now(), //FIXME: should record creation time in PodStatus } if p.containers != nil && len(p.containers) > i { ctx.ContainerEntrypoint = p.containers[i].Workdir ctx.ContainerArgs = p.containers[i].Cmd ctx.ContainerImageID = p.containers[i].Image } if p.spec.LogConfig.Type == jsonfilelog.Name { ctx.LogPath = filepath.Join(p.status.ResourcePath, fmt.Sprintf("%s-json.log", c.Id)) glog.V(1).Info("configure container log to ", ctx.LogPath) } if c.Logs.Driver, err = creator(ctx); err != nil { return } glog.V(1).Infof("configured logger for %s/%s (%s)", p.id, c.Id, c.Name) } return nil }