Hey all,

I'd like to propose some new features/updates for log4cxx, if there's
interest.  A number of these are rather large changes, so it probably
doesn't make sense to work on them until there's a known-good release, as
they would likely break both API and ABI compatibility.

Big Changes:

   1. Using std::shared_ptr(LOG4CXX-486). I did a proof-of-concept about
   three years ago at this point, but I never did a patch/pull request as this
   would change quite a lot.  I think as a result of this I also removed the
   mutex implementation and replaced with std::mutex.
   2. Removal of most APR usage.  Since C++11 we have mutexes, threads,
   condition_variable, time functions, atomic functions, etc.  There's still
   some things beyond what I've mentioned that APR provides, but I could see a
   potential use-case where the core library doesn't depend on APR, although
   it would have limited functionality at that point.
   3. Removal of maven for site generation.  While it does provide a
   consistent feel with log4j2, it seems like it is the source of a large
   number of problems(releasing, building, etc.).  It seems to me that the
   best way would be to use doxygen to generate the site instead; we can use
   markdown to create documentation pages instead of the doxia apt format.
   The other advantage to this would be that it also means that only one site
   is generated that contains both normal documentation as well as the API
   documentation at the same time.
   4. ABI compatibility.  It would be good to keep all instance variables
   in a private data member, so that they can be added/removed without
   breaking the ABI.  This may require some other changes to the API though,
   as it would probably break some inline methods(this pattern is commonly
   called a pimpl).

Medium changes:

   1. Adding in libfmt to format arguments[1].  I did a proof-of-concept
   earlier today by adding a new macro earlier today that looks like the
   following: LOG4CXX_ERROR_F( logger, "hi {}", "Robert" );  Since this
   library provides a bunch of nice formatting functions it should make
   logging much clearer and more like log4j2.
   2. Remove the autotools build - it seems to me that the CMake tooling
   has successfully worked, and is fully cross-platform at this point.  Is
   there a particular reason to keep it around still?
   3. Support for log4j2-style XML/JSON/YAML documents.  The information
   for log4j(1) style documents is harder to find now, so it seems to me that
   having commonality with log4j2 moving forward would be a good idea for
   consistency.
   4. Add a new library to allow logging from Qt-based applications, e.g.
   log4cxx-qt.  I've done this before using qInstallMessageHandler[2], so it's
   not too difficult to do.  Also having some default appenders for e.g.
   QString is useful, so that when I'm logging I don't need to do
   .toStdString() all the time on the QStrings.

Going through the currently open issues in JIRA, there's also a large
number that are either so old that they don't make much sense, or may have
been fixed already.  Would it make sense to go through them at some point?
That's probably not something that I can do alone, but I can help to go
through them.

-Robert Middleton

[1]: https://fmt.dev/latest/index.html
[2]: https://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler

Reply via email to