Code Monkey home page Code Monkey logo

Comments (7)

dpc avatar dpc commented on September 27, 2024

Can't really flush an async logger, as it can't not control the receiver on the other side of a channel.

The closest thing we could have is maybe waiting for the channel to empty. But I'm not sure if we should.

Generally displaying password prompts via logging is not a good idea. One should be using stderr for that, or some completely different things altogether.

from async.

gabyx avatar gabyx commented on September 27, 2024

Jeah sure. I guessed that its kind of tricky, waiting till the channel has emptied is close, but probably still no guaranteed that the underlaying drains have been flushed... only the channel is empty...

Thanks for the response. I find another solution.

from async.

dpc avatar dpc commented on September 27, 2024

Ah. I'm silly. You are logging with slog-async, and then you might want to display prompt etc. on stderr . It seems like a legitimate use case...

Under the hood we are using

async/lib.rs

Line 336 in c2040ac

tl_sender: thread_local::ThreadLocal::new(),
to send messages, from crossbeam-channel.

It does support is_empty(): https://docs.rs/crossbeam-channel/latest/crossbeam_channel/struct.Sender.html#method.is_empty

So i guess we (I mean... you, if you care enough to submit a PR :D ) could add a new method to the trait / API that would attempt to "flush" (e.g. wait until is_empty() == true with some polling interval). If it's a trait, add a default impl that just return a custom IO error "unsupported" for backward compat.

@Techcable for awareness.

from async.

gabyx avatar gabyx commented on September 27, 2024

Yes, you understood that correctly. Yes, sounds interesting to have a look at over the weekend. Thanks for pointing into the directions! If there are more thoughts let me know.

from async.

gabyx avatar gabyx commented on September 27, 2024

@dpc: Some question for undestanding the problem better: Do you think it makes sense to make a new trait Flushable which a Drain instance can have where it would implement flush in lib slog/lib.rs.
And then make an implementation for Async as you suggested =).

Thanks alot

from async.

gabyx avatar gabyx commented on September 27, 2024

Ah maybe its better to add this functionality to the Drain with a default implementation?

from async.

dpc avatar dpc commented on September 27, 2024

Most ecosystem expects Drain already, so it would have be a new method on an existing trait with an default impl that does something reasonable (like signals lack of support for flushing).

from async.

Related Issues (13)

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.