plog icon indicating copy to clipboard operation
plog copied to clipboard

[Feature Request] Single logger, but each appender has a different level

Open Smurf-IV opened this issue 1 year ago • 4 comments

If I am using IoC or shared logger etc. Then the shared instance does not want to know what has been set up and what instances are being used (i.e. default always)

But (for example)

  • Errors only should go to the EventLog,
  • Anything that is not Debug / Verbose goes to Console
  • Everything goes to a file All via the default macros

so, If the code calls PLOGD << then I would expect only the file to have an update If the code calls PLOGE, then all the appenders get an entry.

Is this possible, or have I missed something ?

Smurf-IV avatar Aug 16 '23 13:08 Smurf-IV

I think it might be possible, by:

  • Moving the Severity calls into IAppender
  • In Logger.h
    • Iterate over Appenders to get the Max Severity
    • If set is called at this level, then call set on all appenders
    • in the operator call, also check the severity before calling it's write.

In the IAppender, have it's default severity set to "unknown" then when it is added to the logger, if it is set to unknown, then set it to the loggers value.

I think with some tweaking, the above should then be backward compatible with existing builds as well.

Thoughts ?

Smurf-IV avatar Aug 16 '23 13:08 Smurf-IV

It should be possible with the following approach: https://github.com/SergiusTheBest/plog/issues/181#issuecomment-786281845 Could you check if it works for your use case?

SergiusTheBest avatar Aug 18 '23 09:08 SergiusTheBest

That explanation would work, can this be added more prominently, and perhaps in an example please ?

Smurf-IV avatar Aug 22 '23 06:08 Smurf-IV

I ran into the same problem and added m_severity as an instance variable inside ConsoleAppender. The new write method looks like this, and it solves my problem with a half dozen changed lines of code. ` virtual void write (const Record &record) PLOG_OVERRIDE { if (record.getSeverity() <= m_severity) { util::nstring str = Formatter::format(record); util::MutexLock lock(m_mutex);

            writestr(str);
        }
    }

`

ChrisE2018 avatar Sep 04 '23 11:09 ChrisE2018