mirror of
				https://github.com/caddyserver/caddy.git
				synced 2025-11-03 19:17:29 -05:00 
			
		
		
		
	httpcaddyfile: Implement log sampling config (#6682)
	
		
			
	
		
	
	
		
	
		
			Some checks failed
		
		
	
	
		
			
				
	
				Tests / test (./cmd/caddy/caddy, ~1.22.3, macos-14, 0, 1.22, mac) (push) Waiting to run
				
			
		
			
				
	
				Tests / test (./cmd/caddy/caddy, ~1.23.0, macos-14, 0, 1.23, mac) (push) Waiting to run
				
			
		
			
				
	
				Tests / test (./cmd/caddy/caddy.exe, ~1.22.3, windows-latest, True, 1.22, windows) (push) Waiting to run
				
			
		
			
				
	
				Tests / test (./cmd/caddy/caddy.exe, ~1.23.0, windows-latest, True, 1.23, windows) (push) Waiting to run
				
			
		
			
				
	
				Lint / lint (macos-14, mac) (push) Waiting to run
				
			
		
			
				
	
				Lint / lint (windows-latest, windows) (push) Waiting to run
				
			
		
			
				
	
				Tests / test (./cmd/caddy/caddy, ~1.22.3, ubuntu-latest, 0, 1.22, linux) (push) Failing after 3m36s
				
			
		
			
				
	
				Tests / test (./cmd/caddy/caddy, ~1.23.0, ubuntu-latest, 0, 1.23, linux) (push) Failing after 2m8s
				
			
		
			
				
	
				Tests / test (s390x on IBM Z) (push) Has been skipped
				
			
		
			
				
	
				Tests / goreleaser-check (push) Has been skipped
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, aix) (push) Successful in 1m58s
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, darwin) (push) Successful in 2m36s
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, dragonfly) (push) Successful in 1m33s
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, freebsd) (push) Successful in 1m25s
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, illumos) (push) Successful in 1m26s
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, linux) (push) Successful in 1m27s
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, netbsd) (push) Successful in 1m28s
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, openbsd) (push) Successful in 1m28s
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, solaris) (push) Successful in 1m25s
				
			
		
			
				
	
				Cross-Build / build (~1.22.3, 1.22, windows) (push) Successful in 1m24s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, aix) (push) Successful in 1m39s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, darwin) (push) Successful in 1m17s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, dragonfly) (push) Successful in 1m17s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, freebsd) (push) Successful in 1m18s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, illumos) (push) Successful in 1m16s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, linux) (push) Successful in 1m17s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, netbsd) (push) Successful in 1m22s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, openbsd) (push) Successful in 1m18s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, solaris) (push) Successful in 1m16s
				
			
		
			
				
	
				Cross-Build / build (~1.23.0, 1.23, windows) (push) Successful in 1m15s
				
			
		
			
				
	
				Lint / lint (ubuntu-latest, linux) (push) Failing after 2m0s
				
			
		
			
				
	
				Lint / govulncheck (push) Successful in 1m29s
				
			
		
		
	
	
				
					
				
			
		
			Some checks failed
		
		
	
	Tests / test (./cmd/caddy/caddy, ~1.22.3, macos-14, 0, 1.22, mac) (push) Waiting to run
				
			Tests / test (./cmd/caddy/caddy, ~1.23.0, macos-14, 0, 1.23, mac) (push) Waiting to run
				
			Tests / test (./cmd/caddy/caddy.exe, ~1.22.3, windows-latest, True, 1.22, windows) (push) Waiting to run
				
			Tests / test (./cmd/caddy/caddy.exe, ~1.23.0, windows-latest, True, 1.23, windows) (push) Waiting to run
				
			Lint / lint (macos-14, mac) (push) Waiting to run
				
			Lint / lint (windows-latest, windows) (push) Waiting to run
				
			Tests / test (./cmd/caddy/caddy, ~1.22.3, ubuntu-latest, 0, 1.22, linux) (push) Failing after 3m36s
				
			Tests / test (./cmd/caddy/caddy, ~1.23.0, ubuntu-latest, 0, 1.23, linux) (push) Failing after 2m8s
				
			Tests / test (s390x on IBM Z) (push) Has been skipped
				
			Tests / goreleaser-check (push) Has been skipped
				
			Cross-Build / build (~1.22.3, 1.22, aix) (push) Successful in 1m58s
				
			Cross-Build / build (~1.22.3, 1.22, darwin) (push) Successful in 2m36s
				
			Cross-Build / build (~1.22.3, 1.22, dragonfly) (push) Successful in 1m33s
				
			Cross-Build / build (~1.22.3, 1.22, freebsd) (push) Successful in 1m25s
				
			Cross-Build / build (~1.22.3, 1.22, illumos) (push) Successful in 1m26s
				
			Cross-Build / build (~1.22.3, 1.22, linux) (push) Successful in 1m27s
				
			Cross-Build / build (~1.22.3, 1.22, netbsd) (push) Successful in 1m28s
				
			Cross-Build / build (~1.22.3, 1.22, openbsd) (push) Successful in 1m28s
				
			Cross-Build / build (~1.22.3, 1.22, solaris) (push) Successful in 1m25s
				
			Cross-Build / build (~1.22.3, 1.22, windows) (push) Successful in 1m24s
				
			Cross-Build / build (~1.23.0, 1.23, aix) (push) Successful in 1m39s
				
			Cross-Build / build (~1.23.0, 1.23, darwin) (push) Successful in 1m17s
				
			Cross-Build / build (~1.23.0, 1.23, dragonfly) (push) Successful in 1m17s
				
			Cross-Build / build (~1.23.0, 1.23, freebsd) (push) Successful in 1m18s
				
			Cross-Build / build (~1.23.0, 1.23, illumos) (push) Successful in 1m16s
				
			Cross-Build / build (~1.23.0, 1.23, linux) (push) Successful in 1m17s
				
			Cross-Build / build (~1.23.0, 1.23, netbsd) (push) Successful in 1m22s
				
			Cross-Build / build (~1.23.0, 1.23, openbsd) (push) Successful in 1m18s
				
			Cross-Build / build (~1.23.0, 1.23, solaris) (push) Successful in 1m16s
				
			Cross-Build / build (~1.23.0, 1.23, windows) (push) Successful in 1m15s
				
			Lint / lint (ubuntu-latest, linux) (push) Failing after 2m0s
				
			Lint / govulncheck (push) Successful in 1m29s
				
			* Allow log sampling configuration from Caddyfile * Add log sampling adapt tests
This commit is contained in:
		
							parent
							
								
									825fe48e06
								
							
						
					
					
						commit
						b183aec83c
					
				@ -981,6 +981,50 @@ func parseLogHelper(h Helper, globalLogNames map[string]struct{}) ([]ConfigValue
 | 
				
			|||||||
			}
 | 
								}
 | 
				
			||||||
			cl.WriterRaw = caddyconfig.JSONModuleObject(wo, "output", moduleName, h.warnings)
 | 
								cl.WriterRaw = caddyconfig.JSONModuleObject(wo, "output", moduleName, h.warnings)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							case "sampling":
 | 
				
			||||||
 | 
								d := h.Dispenser.NewFromNextSegment()
 | 
				
			||||||
 | 
								for d.NextArg() {
 | 
				
			||||||
 | 
									// consume any tokens on the same line, if any.
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								sampling := &caddy.LogSampling{}
 | 
				
			||||||
 | 
								for nesting := d.Nesting(); d.NextBlock(nesting); {
 | 
				
			||||||
 | 
									subdir := d.Val()
 | 
				
			||||||
 | 
									switch subdir {
 | 
				
			||||||
 | 
									case "interval":
 | 
				
			||||||
 | 
										if !d.NextArg() {
 | 
				
			||||||
 | 
											return nil, d.ArgErr()
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										interval, err := time.ParseDuration(d.Val() + "ns")
 | 
				
			||||||
 | 
										if err != nil {
 | 
				
			||||||
 | 
											return nil, d.Errf("failed to parse interval: %v", err)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										sampling.Interval = interval
 | 
				
			||||||
 | 
									case "first":
 | 
				
			||||||
 | 
										if !d.NextArg() {
 | 
				
			||||||
 | 
											return nil, d.ArgErr()
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										first, err := strconv.Atoi(d.Val())
 | 
				
			||||||
 | 
										if err != nil {
 | 
				
			||||||
 | 
											return nil, d.Errf("failed to parse first: %v", err)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										sampling.First = first
 | 
				
			||||||
 | 
									case "thereafter":
 | 
				
			||||||
 | 
										if !d.NextArg() {
 | 
				
			||||||
 | 
											return nil, d.ArgErr()
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										thereafter, err := strconv.Atoi(d.Val())
 | 
				
			||||||
 | 
										if err != nil {
 | 
				
			||||||
 | 
											return nil, d.Errf("failed to parse thereafter: %v", err)
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
										sampling.Thereafter = thereafter
 | 
				
			||||||
 | 
									default:
 | 
				
			||||||
 | 
										return nil, d.Errf("unrecognized subdirective: %s", subdir)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								cl.Sampling = sampling
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case "core":
 | 
							case "core":
 | 
				
			||||||
			if !h.NextArg() {
 | 
								if !h.NextArg() {
 | 
				
			||||||
				return nil, h.ArgErr()
 | 
									return nil, h.ArgErr()
 | 
				
			||||||
 | 
				
			|||||||
@ -62,6 +62,20 @@ func TestLogDirectiveSyntax(t *testing.T) {
 | 
				
			|||||||
			output:      `{"logging":{"logs":{"default":{"exclude":["http.log.access.name-override"]},"name-override":{"writer":{"filename":"foo.log","output":"file"},"core":{"module":"mock"},"include":["http.log.access.name-override"]}}},"apps":{"http":{"servers":{"srv0":{"listen":[":8080"],"logs":{"default_logger_name":"name-override"}}}}}}`,
 | 
								output:      `{"logging":{"logs":{"default":{"exclude":["http.log.access.name-override"]},"name-override":{"writer":{"filename":"foo.log","output":"file"},"core":{"module":"mock"},"include":["http.log.access.name-override"]}}},"apps":{"http":{"servers":{"srv0":{"listen":[":8080"],"logs":{"default_logger_name":"name-override"}}}}}}`,
 | 
				
			||||||
			expectError: false,
 | 
								expectError: false,
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								input: `:8080 {
 | 
				
			||||||
 | 
									log {
 | 
				
			||||||
 | 
										sampling {
 | 
				
			||||||
 | 
											interval 2
 | 
				
			||||||
 | 
											first 3
 | 
				
			||||||
 | 
											thereafter 4
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								`,
 | 
				
			||||||
 | 
								output:      `{"logging":{"logs":{"default":{"exclude":["http.log.access.log0"]},"log0":{"sampling":{"interval":2,"first":3,"thereafter":4},"include":["http.log.access.log0"]}}},"apps":{"http":{"servers":{"srv0":{"listen":[":8080"],"logs":{"default_logger_name":"log0"}}}}}}`,
 | 
				
			||||||
 | 
								expectError: false,
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	} {
 | 
						} {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		adapter := caddyfile.Adapter{
 | 
							adapter := caddyfile.Adapter{
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
						log {
 | 
				
			||||||
 | 
							sampling {
 | 
				
			||||||
 | 
								interval 300
 | 
				
			||||||
 | 
								first 50
 | 
				
			||||||
 | 
								thereafter 40
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					----------
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						"logging": {
 | 
				
			||||||
 | 
							"logs": {
 | 
				
			||||||
 | 
								"default": {
 | 
				
			||||||
 | 
									"sampling": {
 | 
				
			||||||
 | 
										"interval": 300,
 | 
				
			||||||
 | 
										"first": 50,
 | 
				
			||||||
 | 
										"thereafter": 40
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,45 @@
 | 
				
			|||||||
 | 
					:80 {
 | 
				
			||||||
 | 
						log {
 | 
				
			||||||
 | 
							sampling {
 | 
				
			||||||
 | 
								interval 300
 | 
				
			||||||
 | 
								first 50
 | 
				
			||||||
 | 
								thereafter 40
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					----------
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						"logging": {
 | 
				
			||||||
 | 
							"logs": {
 | 
				
			||||||
 | 
								"default": {
 | 
				
			||||||
 | 
									"exclude": [
 | 
				
			||||||
 | 
										"http.log.access.log0"
 | 
				
			||||||
 | 
									]
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"log0": {
 | 
				
			||||||
 | 
									"sampling": {
 | 
				
			||||||
 | 
										"interval": 300,
 | 
				
			||||||
 | 
										"first": 50,
 | 
				
			||||||
 | 
										"thereafter": 40
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									"include": [
 | 
				
			||||||
 | 
										"http.log.access.log0"
 | 
				
			||||||
 | 
									]
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						"apps": {
 | 
				
			||||||
 | 
							"http": {
 | 
				
			||||||
 | 
								"servers": {
 | 
				
			||||||
 | 
									"srv0": {
 | 
				
			||||||
 | 
										"listen": [
 | 
				
			||||||
 | 
											":80"
 | 
				
			||||||
 | 
										],
 | 
				
			||||||
 | 
										"logs": {
 | 
				
			||||||
 | 
											"default_logger_name": "log0"
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user