[Issue 24468] stdThreadLocalLog does not print `log` and `trace` logs

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue May 28 23:13:54 UTC 2024


https://issues.dlang.org/show_bug.cgi?id=24468

Forest <forestix at nom.one> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |forestix at nom.one

--- Comment #3 from Forest <forestix at nom.one> ---
The experience I had today as a newcomer to Phobos logging:

- Read the std.logger docs.
- Create a StdForwardLogger for each of my modules.
  (I want to control each module's log level separately.)
- Discover that trace log messages are silently discarded.
- Set my logger's log level.
- Discover that trace log messages are still silently discarded.
- Read the std.logger docs again.
- Set globalLogLevel.
- Discover that trace log messages are still silently discarded.
- Read the std.logger docs again.
- Set sharedLog.logLevel.
- Discover that the compiler won't let me
  (none of the overloads of `logLevel` are callable using a `shared` mutable
object)
- Read the std.logger docs again.
- Notice how much time this basic task is taking, and swear in exasperation.
- Grovel through the dlang forum archive in search of help.
- Find the magic incantation here:
  https://forum.dlang.org/post/mveqddfktkykwvhombsl@forum.dlang.org
  (cast()sharedLog).logLevel = LogLevel.all;
- Try the magic incantation.
- Discover that the compiler won't let me use it in @safe code.

A default log level higher than `trace` is no surprise; that's reasonably
common in logging libraries. However, dealing with it in Phobos is surprisingly
painful.

In particular, the solution has at least these problems:

- It's nonintuitive.
- It's not clearly documented.
- It's unreasonably awkward for something as common as logging.
- It doesn't work at all in @safe code.

After finally getting to the bottom of it (and nearly giving up on D because
this is far from the first Phobos usability problem to bite me) I see that I
could work around it in my own programs by using @trusted code. However, I'm
writing a library, and I really don't want to require that its users resort to
library-specific functions or @trusted shenanigans to control such basic
functionality as logging.

It would be nice if this was either fixed by a revised std.logger design, or at
least hidden behind a clearly documented standard interface.

--


More information about the Digitalmars-d-bugs mailing list