Creating a custom log message categorie

Why not just define a new log level type? Since logging code mostly do duck typing, it works with a few methods and there is no need for type-piracy. The downside may be that some third-party loggers may explicitly expect LogLevel.

using Logging

struct MyLogLevel
    level::Int32
end

const Trace = MyLogLevel(-10_000)

Base.isless(a::MyLogLevel, b::LogLevel) = isless(a.level, b.level)
Base.isless(a::LogLevel, b::MyLogLevel) = isless(a.level, b.level)
Base.convert(::Type{LogLevel}, level::MyLogLevel) = LogLevel(level.level)
Base.show(io::IO, level::MyLogLevel) =
    if level == Trace
        print(io, "Trace")
    else
        show(io, LogLevel(level))
    end

Logging.disable_logging(Logging.BelowMinLevel)

with_logger(ConsoleLogger(stderr, convert(LogLevel, Trace))) do
    @logmsg Trace "message"
end
2 Likes