Skip to content

Commit

Permalink
Move ConsoleLogging.jl into Base (#54428)
Browse files Browse the repository at this point in the history
Fixes #51493, fixes
#52075

(cherry picked from commit 8742d3c)
  • Loading branch information
KristofferC authored and KristofferC committed May 22, 2024
1 parent 5c169ae commit bb67376
Show file tree
Hide file tree
Showing 10 changed files with 37 additions and 53 deletions.
10 changes: 6 additions & 4 deletions base/Base.jl
Original file line number Diff line number Diff line change
Expand Up @@ -401,8 +401,11 @@ include("weakkeydict.jl")
include("scopedvalues.jl")
using .ScopedValues

# metaprogramming
include("meta.jl")

# Logging
include("logging.jl")
include("logging/logging.jl")
using .CoreLogging

include("env.jl")
Expand Down Expand Up @@ -494,9 +497,6 @@ include("irrationals.jl")
include("mathconstants.jl")
using .MathConstants: ℯ, π, pi

# metaprogramming
include("meta.jl")

# Stack frames and traces
include("stacktraces.jl")
using .StackTraces
Expand Down Expand Up @@ -633,6 +633,8 @@ function __init__()
if get_bool_env("JULIA_USE_FLISP_PARSER", false) === false
JuliaSyntax.enable_in_core!()
end

CoreLogging.global_logger(CoreLogging.ConsoleLogger())
nothing
end

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@ Log levels less than `min_level` are filtered out.
Message formatting can be controlled by setting keyword arguments:
* `meta_formatter` is a function which takes the log event metadata
`(level, _module, group, id, file, line)` and returns a face name (used in
the constructed [`AnnotatedString`](@ref Base.AnnotatedString)), prefix and
suffix for the log message. The default is to prefix with the log level and
a suffix containing the module, file and line location.
`(level, _module, group, id, file, line)` and returns a color (as would be
passed to printstyled), prefix and suffix for the log message. The
default is to prefix with the log level and a suffix containing the module,
file and line location.
* `show_limited` limits the printing of large data structures to something
which can fit on the screen by setting the `:limit` `IOContext` key during
formatting.
Expand Down Expand Up @@ -58,10 +58,10 @@ end
showvalue(io, ex::Exception) = showerror(io, ex)

function default_logcolor(level::LogLevel)
level < Info ? :log_debug :
level < Warn ? :log_info :
level < Error ? :log_warn :
:log_error
level < Info ? Base.debug_color() :
level < Warn ? Base.info_color() :
level < Error ? Base.warn_color() :
Base.error_color()
end

function default_metafmt(level::LogLevel, _module, group, id, file, line)
Expand Down Expand Up @@ -103,8 +103,6 @@ function termlength(str)
return N
end

termlength(str::Base.AnnotatedString) = textwidth(str)

function handle_message(logger::ConsoleLogger, level::LogLevel, message, _module, group, id,
filepath, line; kwargs...)
@nospecialize
Expand Down Expand Up @@ -156,10 +154,6 @@ function handle_message(logger::ConsoleLogger, level::LogLevel, message, _module
# Format lines as text with appropriate indentation and with a box
# decoration on the left.
color, prefix, suffix = logger.meta_formatter(level, _module, group, id, filepath, line)::Tuple{Union{Symbol,Int},String,String}
lcolor = StyledStrings.Legacy.legacy_color(color)
if !isnothing(lcolor)
color = StyledStrings.Face(foreground=lcolor)
end
minsuffixpad = 2
buf = IOBuffer()
iob = IOContext(buf, stream)
Expand All @@ -173,19 +167,19 @@ function handle_message(logger::ConsoleLogger, level::LogLevel, message, _module
nonpadwidth = 2 + length(suffix)
end
for (i, (indent, msg)) in enumerate(msglines)
boxstr = length(msglines) == 1 ? "[" :
i == 1 ? "" :
i < length(msglines) ? "" :
""
print(iob, styled"{$color,bold:$boxstr} ")
boxstr = length(msglines) == 1 ? "[ " :
i == 1 ? " " :
i < length(msglines) ? " " :
" "
printstyled(iob, boxstr, bold=true, color=color)
if i == 1 && !isempty(prefix)
print(iob, styled"{$color,bold:$prefix} ")
printstyled(iob, prefix, " ", bold=true, color=color)
end
print(iob, " "^indent, msg)
if i == length(msglines) && !isempty(suffix)
npad = max(0, justify_width - nonpadwidth) + minsuffixpad
print(iob, " "^npad)
print(iob, styled"{shadow:$suffix}")
printstyled(iob, suffix, color=:light_black)
end
println(iob)
end
Expand Down
2 changes: 2 additions & 0 deletions base/logging.jl → base/logging/logging.jl
Original file line number Diff line number Diff line change
Expand Up @@ -700,4 +700,6 @@ end

_global_logstate = LogState(SimpleLogger())

include("logging/ConsoleLogger.jl")

end # CoreLogging
2 changes: 0 additions & 2 deletions base/meta.jl
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ Convenience functions for metaprogramming.
"""
module Meta

using ..CoreLogging

export quot,
isexpr,
isidentifier,
Expand Down
1 change: 0 additions & 1 deletion doc/Manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,6 @@ uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531"
version = "1.17.0+0"

[[deps.Logging]]
deps = ["StyledStrings"]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
version = "1.11.0"

Expand Down
3 changes: 0 additions & 3 deletions stdlib/Logging/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,6 @@ name = "Logging"
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
version = "1.11.0"

[deps]
StyledStrings = "f489334b-da3d-4c2e-b8f0-e476e12c162b"

[extras]
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"

Expand Down
10 changes: 1 addition & 9 deletions stdlib/Logging/src/Logging.jl
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,6 @@ and available by default.
"""
module Logging

using StyledStrings

# Import the CoreLogging implementation into Logging as new const bindings.
# Doing it this way (rather than with import) makes these symbols accessible to
# tab completion.
Expand Down Expand Up @@ -70,7 +68,7 @@ Alias for [`LogLevel(1_000_001)`](@ref LogLevel).
const AboveMaxLevel = Base.CoreLogging.AboveMaxLevel

using Base.CoreLogging:
closed_stream
closed_stream, ConsoleLogger, default_metafmt

export
AbstractLogger,
Expand All @@ -94,8 +92,6 @@ export
Error,
AboveMaxLevel

include("ConsoleLogger.jl")

# The following are also part of the public API, but not exported:
#
# 1. Log levels:
Expand All @@ -104,8 +100,4 @@ include("ConsoleLogger.jl")
# 2. AbstractLogger message related functions:
# handle_message, shouldlog, min_enabled_level, catch_exceptions,

function __init__()
global_logger(ConsoleLogger())
end

end
24 changes: 12 additions & 12 deletions stdlib/Logging/test/runtests.jl
Original file line number Diff line number Diff line change
Expand Up @@ -63,24 +63,24 @@ end

@testset "Default metadata formatting" begin
@test Logging.default_metafmt(Logging.Debug, Base, :g, :i, expanduser("~/somefile.jl"), 42) ==
(:log_debug, "Debug:", "@ Base ~/somefile.jl:42")
(:blue, "Debug:", "@ Base ~/somefile.jl:42")
@test Logging.default_metafmt(Logging.Info, Main, :g, :i, "a.jl", 1) ==
(:log_info, "Info:", "")
(:cyan, "Info:", "")
@test Logging.default_metafmt(Logging.Warn, Main, :g, :i, "b.jl", 2) ==
(:log_warn, "Warning:", "@ Main b.jl:2")
(:yellow, "Warning:", "@ Main b.jl:2")
@test Logging.default_metafmt(Logging.Error, Main, :g, :i, "", 0) ==
(:log_error, "Error:", "@ Main :0")
(:light_red, "Error:", "@ Main :0")
# formatting of nothing
@test Logging.default_metafmt(Logging.Warn, nothing, :g, :i, "b.jl", 2) ==
(:log_warn, "Warning:", "@ b.jl:2")
(:yellow, "Warning:", "@ b.jl:2")
@test Logging.default_metafmt(Logging.Warn, Main, :g, :i, nothing, 2) ==
(:log_warn, "Warning:", "@ Main")
(:yellow, "Warning:", "@ Main")
@test Logging.default_metafmt(Logging.Warn, Main, :g, :i, "b.jl", nothing) ==
(:log_warn, "Warning:", "@ Main b.jl")
(:yellow, "Warning:", "@ Main b.jl")
@test Logging.default_metafmt(Logging.Warn, nothing, :g, :i, nothing, 2) ==
(:log_warn, "Warning:", "")
(:yellow, "Warning:", "")
@test Logging.default_metafmt(Logging.Warn, Main, :g, :i, "b.jl", 2:5) ==
(:log_warn, "Warning:", "@ Main b.jl:2-5")
(:yellow, "Warning:", "@ Main b.jl:2-5")
end

function dummy_metafmt(level, _module, group, id, file, line)
Expand Down Expand Up @@ -265,9 +265,9 @@ end
# Basic colorization test
@test genmsg("line1\nline2", color=true) ==
"""
\e[36m\e[1m┌\e[39m\e[22m \e[36m\e[1mPREFIX\e[39m\e[22m line1
\e[36m\e[1m│\e[39m\e[22m line2
\e[36m\e[1m└\e[39m\e[22m \e[90mSUFFIX\e[39m
\e[36m\e[1m┌ \e[22m\e[39m\e[36m\e[1mPREFIX \e[22m\e[39mline1
\e[36m\e[1m│ \e[22m\e[39mline2
\e[36m\e[1m└ \e[22m\e[39m\e[90mSUFFIX\e[39m
"""

end
Expand Down
1 change: 0 additions & 1 deletion stdlib/Manifest.toml
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,6 @@ uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
version = "1.11.0"

[[deps.Logging]]
deps = ["StyledStrings"]
uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
version = "1.11.0"

Expand Down
1 change: 1 addition & 0 deletions test/precompile.jl
Original file line number Diff line number Diff line change
Expand Up @@ -478,6 +478,7 @@ precompile_test_harness(false) do dir
Dict(Base.PkgId(Base.root_module(Base, :SHA)) => Base.module_build_id(Base.root_module(Base, :SHA))),
Dict(Base.PkgId(Base.root_module(Base, :Markdown)) => Base.module_build_id(Base.root_module(Base, :Markdown))),
Dict(Base.PkgId(Base.root_module(Base, :StyledStrings)) => Base.module_build_id(Base.root_module(Base, :StyledStrings))),

# and their dependencies
Dict(Base.PkgId(Base.root_module(Base, :Base64)) => Base.module_build_id(Base.root_module(Base, :Base64))),
)
Expand Down

0 comments on commit bb67376

Please sign in to comment.