@@ -7,6 +7,7 @@ module Actress
77 # @api private
88 class Core
99 include TypeCheck
10+ include Concurrent ::Logging
1011
1112 attr_reader :reference , :name , :path , :executor
1213
@@ -15,6 +16,8 @@ class Core
1516 # @option opts [Context] actress_class a class to be instantiated defining Actor's behaviour
1617 # @option opts [Array<Object>] args arguments for actress_class instantiation
1718 # @option opts [Executor] executor, default is `Concurrent.configuration.global_task_pool`
19+ # @option opts [Proc, nil] logger a proc accepting (level, progname, message = nil, &block) params,
20+ # can be used to hook actor instance to any logging system
1821 # @param [Proc] block for class instantiation
1922 def initialize ( opts = { } , &block )
2023 @mailbox = Array . new
@@ -32,11 +35,8 @@ def initialize(opts = {}, &block)
3235 raise 'only root has no parent'
3336 end
3437
35- @path = @parent_core ? File . join ( @parent_core . path , @name ) : @name
36- # TODO add proper logging
37- @logger = Logger . new ( $stderr)
38- @logger . level = opts . fetch ( :logger_level , 1 )
39- @logger . progname = @path
38+ @path = @parent_core ? File . join ( @parent_core . path , @name ) : @name
39+ @logger = opts [ :logger ]
4040
4141 @parent_core . add_child reference if @parent_core
4242
@@ -48,7 +48,7 @@ def initialize(opts = {}, &block)
4848 @actress = actress_class . new *args , &block
4949 @actress . send :initialize_core , self
5050 rescue => ex
51- @logger . error ex
51+ log ERROR , ex
5252 terminate!
5353 end
5454 end
@@ -111,7 +111,7 @@ def terminate!
111111 @parent_core . remove_child reference if @parent_core
112112 @mailbox . each do |envelope |
113113 reject_envelope envelope
114- @logger . debug "rejected #{ envelope . message } from #{ envelope . sender_path } "
114+ log DEBUG , "rejected #{ envelope . message } from #{ envelope . sender_path } "
115115 end
116116 @mailbox . clear
117117 # TODO terminate all children
@@ -146,15 +146,15 @@ def receive_envelope
146146
147147 if terminated?
148148 reject_envelope envelope
149- @logger . fatal "this should not be happening #{ caller [ 0 ] } "
149+ log FATAL , "this should not be happening #{ caller [ 0 ] } "
150150 end
151151
152- @logger . debug "received #{ envelope . message } from #{ envelope . sender_path } "
152+ log DEBUG , "received #{ envelope . message } from #{ envelope . sender_path } "
153153
154154 result = @actress . on_envelope envelope
155155 envelope . ivar . set result unless envelope . ivar . nil?
156156 rescue => error
157- @logger . error error
157+ log ERROR , error
158158 envelope . ivar . fail error unless envelope . ivar . nil?
159159 terminate!
160160 ensure
@@ -170,7 +170,7 @@ def schedule_execution
170170 Thread . current [ :__current_actress__ ] = reference
171171 yield
172172 rescue => e
173- @logger . fatal e
173+ log FATAL , e
174174 ensure
175175 Thread . current [ :__current_actress__ ] = nil
176176 end
@@ -181,6 +181,10 @@ def schedule_execution
181181 def reject_envelope ( envelope )
182182 envelope . reject! ActressTerminated . new ( reference )
183183 end
184+
185+ def log ( level , message = nil , &block )
186+ super level , @path , message , &block
187+ end
184188 end
185189 end
186190end
0 commit comments