Date: prev next · Thread: first prev next last
2019 Archives by date, by thread · List index


On 21/11/2019 12:47, Luboš Luňák wrote:
Hm, sounds rather like a misuse of the SAL log facility to me.  (Each
use of it comes at a cost, so it shouldn't be used too lightly for
anything but logging unusual events.)

  E.g. currently while writing the Skia VCL backend I've added SAL_INFO to
pretty much to each of the drawing functions. And of course normally nobody
wants to see that, but it can be useful if needed, all it takes is setting
SAL_LOG, and it fits nicely with the code (no #ifdefs or anything). So I
disagree with it being just for the unusual stuff (that's SAL_WARN).

  Is it really that costly? It's no-op for non-debug builds, and I was under
the impression that even for debug builds it tries to be fast in the common
case when it's a no-op. So I'd expect this to be insignificant, especially
when compared to costs such as using debug mode libstdc++.

My concerns are:

* We may eventually want to enable SAL_WARN/SAL_INFO for production builds, at which point the space cost of log message strings might become an issue.

* Too much trivial SAL_INFO noise (that was once added ad-hoc and should arguably have only been in a developer's local build) can make it unnecessarily hard to see the more relevant SAL_INFOs (and log area granularity is limited in practice). Of course, it is hard to tell how much of the existing SAL_INFO use falls under that noise category.

When I had originally designed SAL_WARN/SAL_INFO, I had anticipated use along the lines of:

* Use SAL_WARN if it is an obviously erroneous unusual event.  Like

            SAL_WARN_IF(
                *ppLibraryUrl == nullptr, "sal.osl", "rtl_string2UString failed");

in osl_getModuleURLFromAddress (sal/osl/unx/module.cxx), where it warns if the passed-in ppLibraryUrl cannot be converted to an 8-bit string.

* Use SAL_INFO if it is an unusual event that is not obviously an error. Like

        SAL_INFO_IF(
            pLib == nullptr, "sal.osl",
            "dlopen(" << pModuleName << ", " << rtld_mode << "): "
                << dlerror());

in osl_loadModuleAscii (sal/osl/unx/module.cxx), where only the calling code will know whether or not it is in an error if the requested module does not exist. (And where the captured dlerror() output is information that (a) is not available to the caller, and (b) may be valuable in cases where the caller decides that the event is an error.)

I do not claim that this is the only reasonable approach to using SAL_WARN/SAL_INFO, and I have seen more liberal use effectively from day one. But I'm always a little concerned, for the reasons outlined above, when I come across what looks like overly liberal use of SAL_INFO.


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.