From 4b38a412b88ba5ba4a1560904dbc43aa443a13da Mon Sep 17 00:00:00 2001 From: ZhongShengping Date: Tue, 28 Nov 2017 09:24:54 +0800 Subject: [PATCH] Expose use_json logging option It enables JSON-formatted logging from oslo.log. Change-Id: I7fb99ebe2eb24458c738dbcda1df239c4509454e --- manifests/logging.pp | 6 + .../notes/log-json-a17613e1234f8713.yaml | 4 + spec/classes/ec2api_logging_spec.rb | 153 ++++++++++++++---- 3 files changed, 131 insertions(+), 32 deletions(-) create mode 100644 releasenotes/notes/log-json-a17613e1234f8713.yaml diff --git a/manifests/logging.pp b/manifests/logging.pp index 24a5c00..5361eb5 100644 --- a/manifests/logging.pp +++ b/manifests/logging.pp @@ -12,6 +12,10 @@ # (Optional) Use syslog for logging. # Defaults to $::os_service_default # +# [*use_json*] +# (Optional) Use json for logging. +# Defaults to $::os_service_default +# # [*use_stderr*] # (optional) Use stderr for logging # Defaults to $::os_service_default @@ -95,6 +99,7 @@ # class ec2api::logging( $use_syslog = $::os_service_default, + $use_json = $::os_service_default, $use_stderr = $::os_service_default, $log_facility = $::os_service_default, $log_dir = '/var/log/ec2api', @@ -118,6 +123,7 @@ class ec2api::logging( oslo::log { 'ec2api_config': use_stderr => $use_stderr, use_syslog => $use_syslog, + use_json => $use_json, log_dir => $log_dir, log_file => $log_file, debug => $debug, diff --git a/releasenotes/notes/log-json-a17613e1234f8713.yaml b/releasenotes/notes/log-json-a17613e1234f8713.yaml new file mode 100644 index 0000000..41c0413 --- /dev/null +++ b/releasenotes/notes/log-json-a17613e1234f8713.yaml @@ -0,0 +1,4 @@ +--- +features: + - | + Expose use_json logging parameter, which enables JSON formatted logging. diff --git a/spec/classes/ec2api_logging_spec.rb b/spec/classes/ec2api_logging_spec.rb index 4d7cdc3..d2cb539 100644 --- a/spec/classes/ec2api_logging_spec.rb +++ b/spec/classes/ec2api_logging_spec.rb @@ -1,41 +1,130 @@ require 'spec_helper' describe 'ec2api::logging' do - on_supported_os(supported_os: OSDefaults.get_supported_os).each do |os, facts| + + let :params do + { + } + end + + let :log_params do + { + :logging_context_format_string => '%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s', + :logging_default_format_string => '%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s', + :logging_debug_format_suffix => '%(funcName)s %(pathname)s:%(lineno)d', + :logging_exception_prefix => '%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s', + :log_config_append => '/etc/ec2api/logging.conf', + :publish_errors => true, + :default_log_levels => { + 'amqp' => 'WARN', 'amqplib' => 'WARN', 'boto' => 'WARN', + 'sqlalchemy' => 'WARN', 'suds' => 'INFO', 'iso8601' => 'WARN', + 'requests.packages.urllib3.connectionpool' => 'WARN' }, + :fatal_deprecations => true, + :instance_format => '[instance: %(uuid)s] ', + :instance_uuid_format => '[instance: %(uuid)s] ', + :log_date_format => '%Y-%m-%d %H:%M:%S', + :use_syslog => true, + :use_json => true, + :use_stderr => false, + :log_facility => 'LOG_FOO', + :log_dir => '/var/log', + :log_file => '/var/tmp/ec2api_random.log', + :debug => true, + } + end + + shared_examples_for 'ec2api-logging' do + + context 'with basic logging options and default settings' do + it_configures 'basic default logging settings' + end + + context 'with basic logging options and non-default settings' do + before { params.merge!( log_params ) } + it_configures 'basic non-default logging settings' + end + + context 'with extended logging options' do + before { params.merge!( log_params ) } + it_configures 'logging params set' + end + + context 'without extended logging options' do + it_configures 'logging params unset' + end + + end + + shared_examples 'basic default logging settings' do + it 'configures ec2api logging settings with default values' do + is_expected.to contain_oslo__log('ec2api_config').with( + :use_syslog => '', + :use_json => '', + :use_stderr => '', + :syslog_log_facility => '', + :log_dir => '/var/log/ec2api', + :log_file => '/var/log/ec2api/ec2api.log', + :debug => '', + ) + end + end + + shared_examples 'basic non-default logging settings' do + it 'configures ec2api logging settings with non-default values' do + is_expected.to contain_oslo__log('ec2api_config').with( + :use_syslog => true, + :use_json => true, + :use_stderr => false, + :syslog_log_facility => 'LOG_FOO', + :log_dir => '/var/log', + :log_file => '/var/tmp/ec2api_random.log', + :debug => true, + ) + end + end + + shared_examples_for 'logging params set' do + it 'enables logging params' do + is_expected.to contain_oslo__log('ec2api_config').with( + :logging_context_format_string => + '%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [%(request_id)s %(user_identity)s] %(instance)s%(message)s', + :logging_default_format_string => '%(asctime)s.%(msecs)03d %(process)d %(levelname)s %(name)s [-] %(instance)s%(message)s', + :logging_debug_format_suffix => '%(funcName)s %(pathname)s:%(lineno)d', + :logging_exception_prefix => '%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s', + :log_config_append => '/etc/ec2api/logging.conf', + :publish_errors => true, + :default_log_levels => { + 'amqp' => 'WARN', 'amqplib' => 'WARN', 'boto' => 'WARN', + 'sqlalchemy' => 'WARN', 'suds' => 'INFO', 'iso8601' => 'WARN', + 'requests.packages.urllib3.connectionpool' => 'WARN' }, + :fatal_deprecations => true, + :instance_format => '[instance: %(uuid)s] ', + :instance_uuid_format => '[instance: %(uuid)s] ', + :log_date_format => '%Y-%m-%d %H:%M:%S', + ) + end + end + + shared_examples_for 'logging params unset' do + [ :logging_context_format_string, :logging_default_format_string, + :logging_debug_format_suffix, :logging_exception_prefix, + :log_config_append, :publish_errors, + :default_log_levels, :fatal_deprecations, + :instance_format, :instance_uuid_format, + :log_date_format, ].each { |param| + it { is_expected.to contain_oslo__log('ec2api_config').with("#{param}" => '') } + } + end + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| context "on #{os}" do - - let(:facts) { facts.merge! @default_facts } - - describe 'with default parameters' do - it { is_expected.to compile.with_all_deps } - - it { is_expected.to contain_class('ec2api::logging') } - - parameters = { - :use_stderr => '', - :use_syslog => '', - :log_dir => '/var/log/ec2api', - :log_file => '/var/log/ec2api/ec2api.log', - :debug => '', - :logging_context_format_string => '', - :logging_default_format_string => '', - :logging_debug_format_suffix => '', - :logging_exception_prefix => '', - :log_config_append => '', - :default_log_levels => '', - :publish_errors => '', - :fatal_deprecations => '', - :instance_format => '', - :instance_uuid_format => '', - :log_date_format => '', - :syslog_log_facility => '', - :watch_log_file => '', - :logging_user_identity_format => '', - } - - it { is_expected.to contain_oslo__log('ec2api_config').with(parameters) } + let (:facts) do + facts.merge!(OSDefaults.get_facts()) end + it_behaves_like 'ec2api-logging' end end end