diff --git a/lib/fluent/supervisor.rb b/lib/fluent/supervisor.rb index 1b456e5b7f..3f0c74dd6e 100644 --- a/lib/fluent/supervisor.rb +++ b/lib/fluent/supervisor.rb @@ -362,6 +362,7 @@ def reopen! def apply_options(opts) $log.format = opts[:format] if opts[:format] + $log.time_format = opts[:time_format] if opts[:time_format] end def level=(level) @@ -443,7 +444,7 @@ def run_supervisor show_plugin_config if @show_plugin_config read_config set_system_config - @log.apply_options(format: @system_config.log.format) + @log.apply_options(format: @system_config.log.format, time_format: @system_config.log.time_format) $log.info :supervisor, "parsing config file is succeeded", path: @config_path @@ -495,7 +496,7 @@ def run_worker show_plugin_config if @show_plugin_config read_config set_system_config - @log.apply_options(format: @system_config.log.format) + @log.apply_options(format: @system_config.log.format, time_format: @system_config.log.time_format) Process.setproctitle("worker:#{@process_name}") if @process_name diff --git a/lib/fluent/system_config.rb b/lib/fluent/system_config.rb index 9301392e02..0dbd6731e5 100644 --- a/lib/fluent/system_config.rb +++ b/lib/fluent/system_config.rb @@ -48,6 +48,7 @@ class SystemConfig end config_section :log, required: false, init: true, multi: false do config_param :format, :enum, list: [:text, :json], default: :text + config_param :time_format, :string, default: '%Y-%m-%d %H:%M:%S %z' end def self.create(conf) diff --git a/test/config/test_system_config.rb b/test/config/test_system_config.rb index f873915e8c..fc681f9f3b 100644 --- a/test/config/test_system_config.rb +++ b/test/config/test_system_config.rb @@ -56,6 +56,7 @@ def parse_text(text) assert_nil(sc.suppress_config_dump) assert_nil(sc.without_source) assert_equal(:text, sc.log.format) + assert_equal('%Y-%m-%d %H:%M:%S %z', sc.log.time_format) assert_equal(1, s.instance_variable_get(:@workers)) assert_nil(s.instance_variable_get(:@root_dir)) assert_equal(Fluent::Log::LEVEL_INFO, s.instance_variable_get(:@log_level)) @@ -97,6 +98,7 @@ def parse_text(text) <system> <log> format json + time_format %Y </log> </system> EOS @@ -104,6 +106,7 @@ def parse_text(text) sc = Fluent::SystemConfig.new(conf) sc.apply(s) assert_equal(:json, sc.log.format) + assert_equal('%Y', sc.log.time_format) end data( diff --git a/test/test_log.rb b/test/test_log.rb index a767f69790..685524a361 100644 --- a/test/test_log.rb +++ b/test/test_log.rb @@ -405,6 +405,30 @@ def test_format_json }) end + def test_time_format + logdev = @log_device + logger = ServerEngine::DaemonLogger.new(logdev) + log = Fluent::Log.new(logger) + log.time_format = "%Y" + log.level = Fluent::Log::LEVEL_TRACE + log.trace "trace log" + log.debug "debug log" + log.info "info log" + log.warn "warn log" + log.error "error log" + log.fatal "fatal log" + timestamp_str = @timestamp.strftime("%Y") + expected = [ + "#{timestamp_str} [trace]: trace log\n", + "#{timestamp_str} [debug]: debug log\n", + "#{timestamp_str} [info]: info log\n", + "#{timestamp_str} [warn]: warn log\n", + "#{timestamp_str} [error]: error log\n", + "#{timestamp_str} [fatal]: fatal log\n" + ] + assert_equal(expected, log.out.logs) + end + def test_disable_events dl_opts = {} dl_opts[:log_level] = ServerEngine::DaemonLogger::TRACE diff --git a/test/test_supervisor.rb b/test/test_supervisor.rb index 592dec1853..1bc3649455 100644 --- a/test/test_supervisor.rb +++ b/test/test_supervisor.rb @@ -132,6 +132,7 @@ def test_system_config root_dir #{TMP_ROOT_DIR} <log> format json + time_format %Y </log> </system> EOC @@ -149,6 +150,7 @@ def test_system_config assert_equal 2, sys_conf.log_level assert_equal TMP_ROOT_DIR, sys_conf.root_dir assert_equal :json, sys_conf.log.format + assert_equal '%Y', sys_conf.log.time_format end def test_main_process_signal_handlers