diff --git a/src/ruby/lib/grpc/logconfig.rb b/src/ruby/lib/grpc/logconfig.rb index 4f135586272..e50141e27fc 100644 --- a/src/ruby/lib/grpc/logconfig.rb +++ b/src/ruby/lib/grpc/logconfig.rb @@ -14,6 +14,19 @@ # GRPC contains the General RPC module. module GRPC + def self.logger=(logger_obj) + # Need a free variable here to keep value of logger_obj for logger closure + @logger = logger_obj + + extend( + Module.new do + def logger + @logger + end + end + ) + end + # DefaultLogger is a module included in GRPC if no other logging is set up for # it. See ../spec/spec_helpers an example of where other logging is added. module DefaultLogger diff --git a/src/ruby/spec/logconfig_spec.rb b/src/ruby/spec/logconfig_spec.rb new file mode 100644 index 00000000000..a3330086688 --- /dev/null +++ b/src/ruby/spec/logconfig_spec.rb @@ -0,0 +1,30 @@ +# Copyright 2024 gRPC authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +require 'spec_helper' +require 'logger' + +describe GRPC do + describe '.logger=' do + it 'sets logger' do + noop_logger = GRPC::DefaultLogger::NoopLogger.new + GRPC.logger = noop_logger + expect(GRPC.logger).to be(noop_logger) + + custom_logger = Logger.new(STDOUT) + GRPC.logger = custom_logger + expect(GRPC.logger).to be(custom_logger) + end + end +end