Skip to main content

JournaldLogger

Struct JournaldLogger 

Source
pub(super) struct JournaldLogger {
    shared: Arc<Shared>,
}
Expand description

Writes the container output to the journal with the container ID fields and priorities conmon uses, so that journalctl CONTAINER_ID=<id> finds it and podman can put partial lines back together.

Fields§

§shared: Arc<Shared>

Shared with the blocking tasks which send the entries.

Implementations§

Source§

impl JournaldLogger

Source

const SHORT_ID_LEN: usize = 12

The length of the short container ID field.

Source

const PARTIAL_FIELD: (&'static str, &'static str)

The field marking a line which had no ending yet.

Source

pub(super) fn new(id: &str, name: &str) -> Self

A logger with the fields conmon writes: the container ID, the name if given and the syslog identifier, which is the name, or the short container ID without one, like for conmon without a tag.

Source

fn priority(pipe: Pipe) -> Priority

The journal priority of the output of a pipe.

Source

fn send(shared: &Shared, pipe: Pipe, lines: &[Line<'_>], wait: Wait) -> usize

Send the lines to the journal and return how many of them it took or got dropped. A journal which is unavailable, for example while it restarts, must not end the output of the container, so failures are only logged, once until a send succeeds again. Without a journal, or with one which did not take a line in time, the rest of the chunk is dropped right away instead of failing the same way line by line. Without waiting, the sending stops at the first line which the journal does not take right away. Waiting, the lines which did not go out by the deadline of the wait get dropped, a journal which takes each line just in time would block the log of the container for minutes per chunk otherwise.

Source§

impl JournaldLogger

Source

pub(super) async fn write_lines( &self, pipe: Pipe, lines: &[Line<'_>], ) -> Result<()>

Write whole lines of output of the pipe, one entry each. A journal which keeps up takes the lines right away. The ones it does not take are sent from a single blocking task, which waits for it a bounded time, instead of one per line, unless the last wait timed out, see Shared::timed_out. The lines which borrow the chunk get copied for it, the others share their buffer.

Trait Implementations§

Source§

impl Debug for JournaldLogger

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FutureExt for T

§

fn with_context(self, otel_cx: Context) -> WithContext<Self> ⓘ

Attaches the provided Context to this type, returning a WithContext wrapper. Read more
§

fn with_current_context(self) -> WithContext<Self> ⓘ

Attaches the current Context to this type, returning a WithContext wrapper. Read more
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more