diff --git a/config/envoyconfig/bootstrap.go b/config/envoyconfig/bootstrap.go index a5e94df9e..b635df489 100644 --- a/config/envoyconfig/bootstrap.go +++ b/config/envoyconfig/bootstrap.go @@ -2,12 +2,15 @@ package envoyconfig import ( "fmt" + "os" + envoy_config_accesslog_v3 "github.com/envoyproxy/go-control-plane/envoy/config/accesslog/v3" envoy_config_bootstrap_v3 "github.com/envoyproxy/go-control-plane/envoy/config/bootstrap/v3" envoy_config_cluster_v3 "github.com/envoyproxy/go-control-plane/envoy/config/cluster/v3" envoy_config_core_v3 "github.com/envoyproxy/go-control-plane/envoy/config/core/v3" envoy_config_endpoint_v3 "github.com/envoyproxy/go-control-plane/envoy/config/endpoint/v3" envoy_config_metrics_v3 "github.com/envoyproxy/go-control-plane/envoy/config/metrics/v3" + envoy_extensions_access_loggers_file_v3 "github.com/envoyproxy/go-control-plane/envoy/extensions/access_loggers/file/v3" "google.golang.org/protobuf/types/known/durationpb" "google.golang.org/protobuf/types/known/structpb" @@ -16,16 +19,27 @@ import ( ) // BuildBootstrapAdmin builds the admin config for the envoy bootstrap. -func (b *Builder) BuildBootstrapAdmin(cfg *config.Config) (*envoy_config_bootstrap_v3.Admin, error) { - adminAddr, err := parseAddress(cfg.Options.EnvoyAdminAddress) +func (b *Builder) BuildBootstrapAdmin(cfg *config.Config) (admin *envoy_config_bootstrap_v3.Admin, err error) { + admin = &envoy_config_bootstrap_v3.Admin{ + ProfilePath: cfg.Options.EnvoyAdminProfilePath, + } + + admin.Address, err = parseAddress(cfg.Options.EnvoyAdminAddress) if err != nil { return nil, fmt.Errorf("envoyconfig: invalid envoy admin address: %w", err) } - return &envoy_config_bootstrap_v3.Admin{ - AccessLogPath: cfg.Options.EnvoyAdminAccessLogPath, - ProfilePath: cfg.Options.EnvoyAdminProfilePath, - Address: adminAddr, - }, nil + + if cfg.Options.EnvoyAdminAccessLogPath != os.DevNull && cfg.Options.EnvoyAdminAccessLogPath != "" { + tc := marshalAny(&envoy_extensions_access_loggers_file_v3.FileAccessLog{ + Path: cfg.Options.EnvoyAdminAccessLogPath, + }) + admin.AccessLog = append(admin.AccessLog, &envoy_config_accesslog_v3.AccessLog{ + Name: "envoy.access_loggers.file", + ConfigType: &envoy_config_accesslog_v3.AccessLog_TypedConfig{TypedConfig: tc}, + }) + } + + return admin, nil } // BuildBootstrapLayeredRuntime builds the layered runtime for the envoy bootstrap.