mirror of
				https://github.com/juanfont/headscale.git
				synced 2025-10-28 10:51:44 +01:00 
			
		
		
		
	Create a distinct log section in config
This commit is contained in:
		
							parent
							
								
									7247302f45
								
							
						
					
					
						commit
						dd155dca97
					
				@ -47,7 +47,7 @@ func initConfig() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
	machineOutput := HasMachineOutputFlag()
 | 
						machineOutput := HasMachineOutputFlag()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	zerolog.SetGlobalLevel(cfg.LogLevel)
 | 
						zerolog.SetGlobalLevel(cfg.Log.Level)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// If the user has requested a "machine" readable format,
 | 
						// If the user has requested a "machine" readable format,
 | 
				
			||||||
	// then disable login so the output remains valid.
 | 
						// then disable login so the output remains valid.
 | 
				
			||||||
@ -55,7 +55,7 @@ func initConfig() {
 | 
				
			|||||||
		zerolog.SetGlobalLevel(zerolog.Disabled)
 | 
							zerolog.SetGlobalLevel(zerolog.Disabled)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if cfg.JSONLogs {
 | 
						if cfg.Log.Format == headscale.JSONLogFormat {
 | 
				
			||||||
		log.Logger = log.Output(os.Stdout)
 | 
							log.Logger = log.Output(os.Stdout)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -172,8 +172,10 @@ tls_letsencrypt_listen: ":http"
 | 
				
			|||||||
tls_cert_path: ""
 | 
					tls_cert_path: ""
 | 
				
			||||||
tls_key_path: ""
 | 
					tls_key_path: ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
log_level: info
 | 
					log:
 | 
				
			||||||
json_logs: false
 | 
					  # Output formatting for logs: text or json
 | 
				
			||||||
 | 
					  format: text
 | 
				
			||||||
 | 
					  level: info
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Path to a file containg ACL policies.
 | 
					# Path to a file containg ACL policies.
 | 
				
			||||||
# ACLs can be defined as YAML or HUJSON.
 | 
					# ACLs can be defined as YAML or HUJSON.
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										54
									
								
								config.go
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								config.go
									
									
									
									
									
								
							@ -22,6 +22,9 @@ import (
 | 
				
			|||||||
const (
 | 
					const (
 | 
				
			||||||
	tlsALPN01ChallengeType = "TLS-ALPN-01"
 | 
						tlsALPN01ChallengeType = "TLS-ALPN-01"
 | 
				
			||||||
	http01ChallengeType    = "HTTP-01"
 | 
						http01ChallengeType    = "HTTP-01"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						JSONLogFormat = "json"
 | 
				
			||||||
 | 
						TextLogFormat = "text"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Config contains the initial Headscale configuration.
 | 
					// Config contains the initial Headscale configuration.
 | 
				
			||||||
@ -37,8 +40,7 @@ type Config struct {
 | 
				
			|||||||
	PrivateKeyPath                 string
 | 
						PrivateKeyPath                 string
 | 
				
			||||||
	NoisePrivateKeyPath            string
 | 
						NoisePrivateKeyPath            string
 | 
				
			||||||
	BaseDomain                     string
 | 
						BaseDomain                     string
 | 
				
			||||||
	LogLevel                       zerolog.Level
 | 
						Log                            LogConfig
 | 
				
			||||||
	JSONLogs                       bool
 | 
					 | 
				
			||||||
	DisableUpdateCheck             bool
 | 
						DisableUpdateCheck             bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	DERP DERPConfig
 | 
						DERP DERPConfig
 | 
				
			||||||
@ -125,6 +127,11 @@ type ACLConfig struct {
 | 
				
			|||||||
	PolicyPath string
 | 
						PolicyPath string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type LogConfig struct {
 | 
				
			||||||
 | 
						Format string
 | 
				
			||||||
 | 
						Level  zerolog.Level
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func LoadConfig(path string, isFile bool) error {
 | 
					func LoadConfig(path string, isFile bool) error {
 | 
				
			||||||
	if isFile {
 | 
						if isFile {
 | 
				
			||||||
		viper.SetConfigFile(path)
 | 
							viper.SetConfigFile(path)
 | 
				
			||||||
@ -148,8 +155,8 @@ func LoadConfig(path string, isFile bool) error {
 | 
				
			|||||||
	viper.SetDefault("tls_letsencrypt_challenge_type", http01ChallengeType)
 | 
						viper.SetDefault("tls_letsencrypt_challenge_type", http01ChallengeType)
 | 
				
			||||||
	viper.SetDefault("tls_client_auth_mode", "relaxed")
 | 
						viper.SetDefault("tls_client_auth_mode", "relaxed")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	viper.SetDefault("log_level", "info")
 | 
						viper.SetDefault("log.level", "info")
 | 
				
			||||||
	viper.SetDefault("json_logs", false)
 | 
						viper.SetDefault("log.format", TextLogFormat)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	viper.SetDefault("dns_config", nil)
 | 
						viper.SetDefault("dns_config", nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -336,6 +343,34 @@ func GetACLConfig() ACLConfig {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func GetLogConfig() LogConfig {
 | 
				
			||||||
 | 
						logLevelStr := viper.GetString("log.level")
 | 
				
			||||||
 | 
						logLevel, err := zerolog.ParseLevel(logLevelStr)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							logLevel = zerolog.DebugLevel
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						logFormatOpt := viper.GetString("log.format")
 | 
				
			||||||
 | 
						var logFormat string
 | 
				
			||||||
 | 
						switch logFormatOpt {
 | 
				
			||||||
 | 
						case "json":
 | 
				
			||||||
 | 
							logFormat = JSONLogFormat
 | 
				
			||||||
 | 
						case "text":
 | 
				
			||||||
 | 
							logFormat = TextLogFormat
 | 
				
			||||||
 | 
						case "":
 | 
				
			||||||
 | 
							logFormat = TextLogFormat
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							log.Error().
 | 
				
			||||||
 | 
								Str("func", "GetLogConfig").
 | 
				
			||||||
 | 
								Msgf("Could not parse log format: %s. Valid choices are 'json' or 'text'", logFormatOpt)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return LogConfig{
 | 
				
			||||||
 | 
							Format: logFormat,
 | 
				
			||||||
 | 
							Level:  logLevel,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func GetDNSConfig() (*tailcfg.DNSConfig, string) {
 | 
					func GetDNSConfig() (*tailcfg.DNSConfig, string) {
 | 
				
			||||||
	if viper.IsSet("dns_config") {
 | 
						if viper.IsSet("dns_config") {
 | 
				
			||||||
		dnsConfig := &tailcfg.DNSConfig{}
 | 
							dnsConfig := &tailcfg.DNSConfig{}
 | 
				
			||||||
@ -432,13 +467,6 @@ func GetHeadscaleConfig() (*Config, error) {
 | 
				
			|||||||
	configuredPrefixes := viper.GetStringSlice("ip_prefixes")
 | 
						configuredPrefixes := viper.GetStringSlice("ip_prefixes")
 | 
				
			||||||
	parsedPrefixes := make([]netip.Prefix, 0, len(configuredPrefixes)+1)
 | 
						parsedPrefixes := make([]netip.Prefix, 0, len(configuredPrefixes)+1)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	logLevelStr := viper.GetString("log_level")
 | 
					 | 
				
			||||||
	logLevel, err := zerolog.ParseLevel(logLevelStr)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		logLevel = zerolog.DebugLevel
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	jsonLogs := viper.GetBool("json_logs")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	legacyPrefixField := viper.GetString("ip_prefix")
 | 
						legacyPrefixField := viper.GetString("ip_prefix")
 | 
				
			||||||
	if len(legacyPrefixField) > 0 {
 | 
						if len(legacyPrefixField) > 0 {
 | 
				
			||||||
		log.
 | 
							log.
 | 
				
			||||||
@ -491,8 +519,6 @@ func GetHeadscaleConfig() (*Config, error) {
 | 
				
			|||||||
		GRPCAddr:           viper.GetString("grpc_listen_addr"),
 | 
							GRPCAddr:           viper.GetString("grpc_listen_addr"),
 | 
				
			||||||
		GRPCAllowInsecure:  viper.GetBool("grpc_allow_insecure"),
 | 
							GRPCAllowInsecure:  viper.GetBool("grpc_allow_insecure"),
 | 
				
			||||||
		DisableUpdateCheck: viper.GetBool("disable_check_updates"),
 | 
							DisableUpdateCheck: viper.GetBool("disable_check_updates"),
 | 
				
			||||||
		LogLevel:           logLevel,
 | 
					 | 
				
			||||||
		JSONLogs:           jsonLogs,
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		IPPrefixes: prefixes,
 | 
							IPPrefixes: prefixes,
 | 
				
			||||||
		PrivateKeyPath: AbsolutePathFromConfigPath(
 | 
							PrivateKeyPath: AbsolutePathFromConfigPath(
 | 
				
			||||||
@ -554,5 +580,7 @@ func GetHeadscaleConfig() (*Config, error) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ACL: GetACLConfig(),
 | 
							ACL: GetACLConfig(),
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							Log: GetLogConfig(),
 | 
				
			||||||
	}, nil
 | 
						}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -28,8 +28,9 @@ ip_prefixes:
 | 
				
			|||||||
  - fd7a:115c:a1e0::/48
 | 
					  - fd7a:115c:a1e0::/48
 | 
				
			||||||
  - 100.64.0.0/10
 | 
					  - 100.64.0.0/10
 | 
				
			||||||
listen_addr: 0.0.0.0:18080
 | 
					listen_addr: 0.0.0.0:18080
 | 
				
			||||||
log_level: disabled
 | 
					log:
 | 
				
			||||||
json_logs: false
 | 
					  level: disabled
 | 
				
			||||||
 | 
					  format: text
 | 
				
			||||||
logtail:
 | 
					logtail:
 | 
				
			||||||
  enabled: false
 | 
					  enabled: false
 | 
				
			||||||
metrics_listen_addr: 127.0.0.1:19090
 | 
					metrics_listen_addr: 127.0.0.1:19090
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
log_level: trace
 | 
					log:
 | 
				
			||||||
 | 
					  level: trace
 | 
				
			||||||
acl_policy_path: ""
 | 
					acl_policy_path: ""
 | 
				
			||||||
db_type: sqlite3
 | 
					db_type: sqlite3
 | 
				
			||||||
ephemeral_node_inactivity_timeout: 30m
 | 
					ephemeral_node_inactivity_timeout: 30m
 | 
				
			||||||
 | 
				
			|||||||
@ -27,8 +27,9 @@ ip_prefixes:
 | 
				
			|||||||
  - fd7a:115c:a1e0::/48
 | 
					  - fd7a:115c:a1e0::/48
 | 
				
			||||||
  - 100.64.0.0/10
 | 
					  - 100.64.0.0/10
 | 
				
			||||||
listen_addr: 0.0.0.0:18080
 | 
					listen_addr: 0.0.0.0:18080
 | 
				
			||||||
log_level: disabled
 | 
					log:
 | 
				
			||||||
json_logs: false
 | 
					  level: disabled
 | 
				
			||||||
 | 
					  format: text
 | 
				
			||||||
logtail:
 | 
					logtail:
 | 
				
			||||||
  enabled: false
 | 
					  enabled: false
 | 
				
			||||||
metrics_listen_addr: 127.0.0.1:19090
 | 
					metrics_listen_addr: 127.0.0.1:19090
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
log_level: trace
 | 
					log:
 | 
				
			||||||
 | 
					  level: trace
 | 
				
			||||||
acl_policy_path: ""
 | 
					acl_policy_path: ""
 | 
				
			||||||
db_type: sqlite3
 | 
					db_type: sqlite3
 | 
				
			||||||
ephemeral_node_inactivity_timeout: 30m
 | 
					ephemeral_node_inactivity_timeout: 30m
 | 
				
			||||||
 | 
				
			|||||||
@ -28,8 +28,9 @@ ip_prefixes:
 | 
				
			|||||||
  - fd7a:115c:a1e0::/48
 | 
					  - fd7a:115c:a1e0::/48
 | 
				
			||||||
  - 100.64.0.0/10
 | 
					  - 100.64.0.0/10
 | 
				
			||||||
listen_addr: 0.0.0.0:8080
 | 
					listen_addr: 0.0.0.0:8080
 | 
				
			||||||
log_level: disabled
 | 
					log:
 | 
				
			||||||
json_logs: false
 | 
					  format: text
 | 
				
			||||||
 | 
					  level: disabled
 | 
				
			||||||
logtail:
 | 
					logtail:
 | 
				
			||||||
  enabled: false
 | 
					  enabled: false
 | 
				
			||||||
metrics_listen_addr: 127.0.0.1:9090
 | 
					metrics_listen_addr: 127.0.0.1:9090
 | 
				
			||||||
 | 
				
			|||||||
@ -1,4 +1,5 @@
 | 
				
			|||||||
log_level: trace
 | 
					log:
 | 
				
			||||||
 | 
					  level: trace
 | 
				
			||||||
acl_policy_path: ""
 | 
					acl_policy_path: ""
 | 
				
			||||||
db_type: sqlite3
 | 
					db_type: sqlite3
 | 
				
			||||||
ephemeral_node_inactivity_timeout: 30m
 | 
					ephemeral_node_inactivity_timeout: 30m
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user