@@ -159,6 +159,9 @@ Alias for [`LogLevel(2000)`](@ref LogLevel).
159
159
const Error = LogLevel ( 2000 )
160
160
const AboveMaxLevel = LogLevel ( 1000001 )
161
161
162
+ # Global log limiting mechanism for super fast but inflexible global log limiting.
163
+ const _min_enabled_level = Ref {LogLevel} (Debug)
164
+
162
165
function show (io:: IO , level:: LogLevel )
163
166
if level == BelowMinLevel print (io, " BelowMinLevel" )
164
167
elseif level == Debug print (io, " Debug" )
@@ -319,6 +322,15 @@ function issimplekw(@nospecialize val)
319
322
return false
320
323
end
321
324
325
+ # helper function to get the current logger, if enabled for the specified message type
326
+ @noinline Base. @constprop :none function current_logger_for_env (std_level:: LogLevel , group, _module)
327
+ logstate = @inline current_logstate ()
328
+ if std_level >= logstate. min_enabled_level || env_override_minlevel (group, _module)
329
+ return logstate. logger
330
+ end
331
+ return nothing
332
+ end
333
+
322
334
# Generate code for logging macros
323
335
function logmsg_code (_module, file, line, level, message, exs... )
324
336
@nospecialize
@@ -370,23 +382,23 @@ function logmsg_code(_module, file, line, level, message, exs...)
370
382
let
371
383
level = $ level
372
384
# simplify std_level code emitted, if we know it is one of our global constants
373
- std_level = $ (level isa Symbol ? :level : :(level isa LogLevel ? level : convert (LogLevel, level):: LogLevel ))
374
- if std_level >= _min_enabled_level[]
385
+ std_level = $ (level isa Symbol ? :level : :(level isa $ LogLevel ? level : convert ($ LogLevel, level):: $ LogLevel ))
386
+ if std_level >= $ ( _min_enabled_level) []
375
387
group = $ (log_data. _group)
376
388
_module = $ (log_data. _module)
377
- logger = current_logger_for_env (std_level, group, _module)
389
+ logger = $ ( current_logger_for_env) (std_level, group, _module)
378
390
if ! (logger === nothing )
379
391
id = $ (log_data. _id)
380
392
# Second chance at an early bail-out (before computing the message),
381
393
# based on arbitrary logger-specific logic.
382
- if invokelatest (shouldlog, logger, level, _module, group, id)
394
+ if invokelatest ($ shouldlog, logger, level, _module, group, id)
383
395
file = $ (log_data. _file)
384
396
if file isa String
385
397
file = Base. fixup_stdlib_path (file)
386
398
end
387
399
line = $ (log_data. _line)
388
400
local msg, kwargs
389
- $ (logrecord) && invokelatest (handle_message,
401
+ $ (logrecord) && invokelatest ($ handle_message,
390
402
logger, level, msg, _module, group, id, file, line;
391
403
kwargs... )
392
404
end
@@ -481,9 +493,6 @@ function logmsg_shim(level, message, _module, group, id, file, line, kwargs)
481
493
nothing
482
494
end
483
495
484
- # Global log limiting mechanism for super fast but inflexible global log limiting.
485
- const _min_enabled_level = Ref {LogLevel} (Debug)
486
-
487
496
# LogState - a cache of data extracted from the logger, plus the logger itself.
488
497
struct LogState
489
498
min_enabled_level:: LogLevel
@@ -499,15 +508,6 @@ function current_logstate()
499
508
return something (maybe, _global_logstate):: LogState
500
509
end
501
510
502
- # helper function to get the current logger, if enabled for the specified message type
503
- @noinline Base. @constprop :none function current_logger_for_env (std_level:: LogLevel , group, _module)
504
- logstate = @inline current_logstate ()
505
- if std_level >= logstate. min_enabled_level || env_override_minlevel (group, _module)
506
- return logstate. logger
507
- end
508
- return nothing
509
- end
510
-
511
511
with_logstate (f:: Function , logstate) = @with (CURRENT_LOGSTATE => logstate, f ())
512
512
513
513
# -------------------------------------------------------------------------------
0 commit comments