Giter Club home page Giter Club logo

Comments (6)

zao avatar zao commented on July 3, 2024

When you register a callback with add_callback you can tunnel arbitrary state into the callback by providing it as the user_data parameter.

When your log_handler_t is invoked, the pointer you provided will be present in the user_data argument and you can use the data stashed there to do whatever you want.

Say that you have an EventQueue allocated somewhere for the duration of your logging, you'd have something like this:

void log_to_queue(void* param, loguru::Message const& message) {
  EventQueue* qp = (EventQueue*)param;
  qp->whatever();
}

loguru::add_callback("my_callback", &log_to_queue, (void*)&some_queue,
  some_verbosity, nullptr, nullptr);

If you allocate the queue at the call site and want to destroy it once the callback is removed, you'd have a function that does that passed into the on_close parameter of add_callback, which also gets the void* user_data pointer.

This is a common pattern in any kind of application that has C-style callbacks, letting you sneak in a void* of arbitrary application information so the callback has some state to work with.

Please note that you should copy any parts of the Message (including strings) that you feed into the queue, as the message is only valid for the duration of the callback invocation.

from loguru.

sailfish009 avatar sailfish009 commented on July 3, 2024

without "EventQueue" and only with loguru,
how do i use the function?

i just wonder that whether loguru support the functionality or not.

from loguru.

zao avatar zao commented on July 3, 2024

I'm not sure I follow what you're actually asking about.

Loguru invokes the callback in the thread that performs the log_message call. It's up to you to write logic in this synchronous callback to communicate information to some other thread of yours.

Could you please explain what functionality it is you're looking for that could be built into Loguru? What problem are you trying to solve with this?

from loguru.

sailfish009 avatar sailfish009 commented on July 3, 2024

it would be good if loguru support eventqueue,
i need some callback functionality which take care of getting error messages,
and back to user application.

now i have implemented simple function using mbed-events library..
what i try to say is one tool is enough, two is too much.

from loguru.

sailfish009 avatar sailfish009 commented on July 3, 2024

as of the result, my use case is like below:

#include "event_queue_function.h"

bool my_function_library()
{
  // ...
  if(error)
  {
#if DEBUG
    LOG_ERROR("error message\n");
#else 
    event_queue_function(...);
#endif
    return false;
  }
  return true;
}

from loguru.

emilk avatar emilk commented on July 3, 2024

I understand your desire for an easy way to collect log messages in a queue, but I feel this is outside the scope of Loguru. As @zao pointed out you can rather easily use the log callback functionality in loguru to collect messages and process them as you want.

I prefer making Loguru a library that allows for easy "gluing" like this, rather than one which comes pre-glued with big dependencies.

Or in other words: Loguru's aim is to be a lightweight logging library, not a framework for processing logging messages.

from loguru.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.