@@ -93,6 +93,36 @@ class << self
9393 expect ( adapter . thread_pool ) . to be_nil
9494 end
9595 end
96+
97+ context "with logger parameter" do
98+ it "uses provided logger" do
99+ custom_logger = Logger . new ( $stdout)
100+ adapter = described_class . new ( logger : custom_logger )
101+ expect ( adapter . logger ) . to eq ( custom_logger )
102+ end
103+
104+ it "creates default stdout logger when no logger provided and Rails.logger not available" do
105+ allow ( Rails ) . to receive ( :respond_to? ) . and_return ( true )
106+ allow ( Rails ) . to receive ( :respond_to? ) . with ( :logger ) . and_return ( false )
107+ adapter = described_class . new
108+ expect ( adapter . logger ) . to be_a ( Logger )
109+ end
110+
111+ it "uses Rails.logger as default when Rails is available" do
112+ rails_logger = Logger . new ( $stdout)
113+ allow ( Rails ) . to receive ( :respond_to? ) . and_return ( true )
114+ allow ( Rails ) . to receive ( :logger ) . and_return ( rails_logger )
115+ adapter = described_class . new
116+ expect ( adapter . logger ) . to eq ( rails_logger )
117+ end
118+
119+ it "creates stdout logger when Rails.logger returns nil" do
120+ allow ( Rails ) . to receive ( :respond_to? ) . and_return ( true )
121+ allow ( Rails ) . to receive ( :logger ) . and_return ( nil )
122+ adapter = described_class . new
123+ expect ( adapter . logger ) . to be_a ( Logger )
124+ end
125+ end
96126 end
97127
98128 context "when Rails.cache is not available" do
@@ -698,21 +728,62 @@ class << self
698728 adapter_with_swr . send ( :schedule_refresh , cache_key ) { "refreshed_value" }
699729 end
700730
701- it "releases the refresh lock even if block raises" do
731+ it "logs error and releases lock when refresh block raises error " do
702732 cache_key = "test_key"
703733 refresh_lock_key = "langfuse:#{ cache_key } :refreshing"
734+ mock_logger = instance_double ( Logger )
704735
705- allow ( adapter_with_swr ) . to receive ( :acquire_refresh_lock )
736+ adapter_with_logger = described_class . new (
737+ ttl : ttl ,
738+ stale_ttl : stale_ttl ,
739+ refresh_threads : refresh_threads ,
740+ logger : mock_logger
741+ )
742+
743+ allow ( adapter_with_logger ) . to receive ( :acquire_refresh_lock )
706744 . with ( refresh_lock_key )
707745 . and_return ( true )
708- allow ( adapter_with_swr . thread_pool ) . to receive ( :post ) . and_yield
746+ allow ( adapter_with_logger . thread_pool ) . to receive ( :post ) . and_yield
709747
710- expect ( adapter_with_swr ) . to receive ( :release_lock )
748+ expect ( mock_logger ) . to receive ( :error )
749+ . with ( /Langfuse cache refresh failed for key 'test_key': RuntimeError - test error/ )
750+
751+ expect ( adapter_with_logger ) . to receive ( :release_lock )
711752 . with ( refresh_lock_key )
712753
754+ # Error should be caught and logged, not raised
713755 expect do
714- adapter_with_swr . send ( :schedule_refresh , cache_key ) { raise "test error" }
715- end . to raise_error ( "test error" )
756+ adapter_with_logger . send ( :schedule_refresh , cache_key ) { raise "test error" }
757+ end . not_to raise_error
758+ end
759+
760+ it "logs error with correct exception class and message" do
761+ cache_key = "greeting:1"
762+ refresh_lock_key = "langfuse:#{ cache_key } :refreshing"
763+ mock_logger = instance_double ( Logger )
764+
765+ adapter_with_logger = described_class . new (
766+ ttl : ttl ,
767+ stale_ttl : stale_ttl ,
768+ refresh_threads : refresh_threads ,
769+ logger : mock_logger
770+ )
771+
772+ allow ( adapter_with_logger ) . to receive ( :acquire_refresh_lock )
773+ . with ( refresh_lock_key )
774+ . and_return ( true )
775+ allow ( adapter_with_logger . thread_pool ) . to receive ( :post ) . and_yield
776+
777+ expect ( mock_logger ) . to receive ( :error )
778+ . with ( "Langfuse cache refresh failed for key 'greeting:1': ArgumentError - Invalid prompt data" )
779+
780+ expect ( adapter_with_logger ) . to receive ( :release_lock )
781+ . with ( refresh_lock_key )
782+
783+ # Custom exception type
784+ adapter_with_logger . send ( :schedule_refresh , cache_key ) do
785+ raise ArgumentError , "Invalid prompt data"
786+ end
716787 end
717788 end
718789
0 commit comments