|
1 | 1 | require 'thread' |
2 | 2 | require 'concurrent/delay' |
3 | 3 | require 'concurrent/errors' |
4 | | -require 'concurrent/atomic/atomic_reference' |
5 | | -require 'concurrent/concern/logging' |
6 | 4 | require 'concurrent/concern/deprecation' |
7 | 5 | require 'concurrent/executor/immediate_executor' |
8 | 6 | require 'concurrent/executor/cached_thread_pool' |
9 | 7 | require 'concurrent/utility/processor_counter' |
10 | 8 |
|
11 | 9 | module Concurrent |
12 | | - extend Concern::Logging |
13 | 10 | extend Concern::Deprecation |
14 | 11 |
|
15 | 12 | autoload :Options, 'concurrent/options' |
16 | 13 | autoload :TimerSet, 'concurrent/executor/timer_set' |
17 | 14 | autoload :ThreadPoolExecutor, 'concurrent/executor/thread_pool_executor' |
18 | 15 |
|
19 | | - # @return [Logger] Logger with provided level and output. |
20 | | - def self.create_simple_logger(level = Logger::FATAL, output = $stderr) |
21 | | - # TODO (pitr-ch 24-Dec-2016): figure out why it had to be replaced, stdlogger was deadlocking |
22 | | - lambda do |severity, progname, message = nil, &block| |
23 | | - return false if severity < level |
24 | | - |
25 | | - message = block ? block.call : message |
26 | | - formatted_message = case message |
27 | | - when String |
28 | | - message |
29 | | - when Exception |
30 | | - format "%s (%s)\n%s", |
31 | | - message.message, message.class, (message.backtrace || []).join("\n") |
32 | | - else |
33 | | - message.inspect |
34 | | - end |
35 | | - |
36 | | - output.print format "[%s] %5s -- %s: %s\n", |
37 | | - Time.now.strftime('%Y-%m-%d %H:%M:%S.%L'), |
38 | | - Logger::SEV_LABEL[severity], |
39 | | - progname, |
40 | | - formatted_message |
41 | | - true |
42 | | - end |
43 | | - end |
44 | | - |
45 | | - # Use logger created by #create_simple_logger to log concurrent-ruby messages. |
46 | | - def self.use_simple_logger(level = Logger::FATAL, output = $stderr) |
47 | | - Concurrent.global_logger = create_simple_logger level, output |
48 | | - end |
49 | | - |
50 | | - # @return [Logger] Logger with provided level and output. |
51 | | - # @deprecated |
52 | | - def self.create_stdlib_logger(level = Logger::FATAL, output = $stderr) |
53 | | - logger = Logger.new(output) |
54 | | - logger.level = level |
55 | | - logger.formatter = lambda do |severity, datetime, progname, msg| |
56 | | - formatted_message = case msg |
57 | | - when String |
58 | | - msg |
59 | | - when Exception |
60 | | - format "%s (%s)\n%s", |
61 | | - msg.message, msg.class, (msg.backtrace || []).join("\n") |
62 | | - else |
63 | | - msg.inspect |
64 | | - end |
65 | | - format "[%s] %5s -- %s: %s\n", |
66 | | - datetime.strftime('%Y-%m-%d %H:%M:%S.%L'), |
67 | | - severity, |
68 | | - progname, |
69 | | - formatted_message |
70 | | - end |
71 | | - |
72 | | - lambda do |loglevel, progname, message = nil, &block| |
73 | | - logger.add loglevel, message, progname, &block |
74 | | - end |
75 | | - end |
76 | | - |
77 | | - # Use logger created by #create_stdlib_logger to log concurrent-ruby messages. |
78 | | - # @deprecated |
79 | | - def self.use_stdlib_logger(level = Logger::FATAL, output = $stderr) |
80 | | - Concurrent.global_logger = create_stdlib_logger level, output |
81 | | - end |
82 | | - |
83 | | - # TODO (pitr-ch 27-Dec-2016): remove deadlocking stdlib_logger methods |
84 | | - |
85 | | - # Suppresses all output when used for logging. |
86 | | - NULL_LOGGER = lambda { |level, progname, message = nil, &block| } |
87 | | - |
88 | | - # @!visibility private |
89 | | - GLOBAL_LOGGER = AtomicReference.new(create_simple_logger(Logger::WARN)) |
90 | | - private_constant :GLOBAL_LOGGER |
91 | | - |
92 | | - def self.global_logger |
93 | | - GLOBAL_LOGGER.value |
94 | | - end |
95 | | - |
96 | | - def self.global_logger=(value) |
97 | | - GLOBAL_LOGGER.value = value |
98 | | - end |
99 | | - |
100 | 16 | # @!visibility private |
101 | 17 | GLOBAL_FAST_EXECUTOR = Delay.new { Concurrent.new_fast_executor } |
102 | 18 | private_constant :GLOBAL_FAST_EXECUTOR |
|
0 commit comments