Comments (6)
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.
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.
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.
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.
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.
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)
- very big issue HOT 1
- How do I use this project in Logcat for Android? HOT 1
- [Question] Can be used from inside dll/so libraries?
- Can too much logging cause out of memory error? HOT 1
- Undeclared use of identifier 'pthread_getname_np' when building under OpenBSD/amd64 7.1-stable HOT 2
- Use in real-world sotftware HOT 1
- some improvement points
- Loguru and glog conflict error
- Logging to files fails on Windows if the path contains Unicode characters
- possible leaks in add_file function
- Multi file logging HOT 2
- Porting for a pure C implementation HOT 2
- Windows logging to file on different drive fails HOT 2
- Provide a new release
- loguru.cpp: warning C4005: 'localtime_r': macro redefinition
- Make colors customizable
- loguru.cpp: warning C4005: 'WIN32_LEAN_AND_MEAN' and 'NOMINMAX': macro redefinition
- Terminal color detection on Linux is wrong
- CMake: Errors when linking to shared library HOT 1
- compilation fail on linux aarch64 ppc64le and s390x because of -Werror=type-limits HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from loguru.