pub struct FileSink { /* private fields */ }Expand description
Synchronous bounded JSONL sink; callers choose it only outside hot paths.
Implementations§
Source§impl FileSink
impl FileSink
Sourcepub fn new(config: FileSinkConfig) -> Result<Self, LogError>
pub fn new(config: FileSinkConfig) -> Result<Self, LogError>
Creates a sink after validating nonzero size and bounded retention.
Examples found in repository?
examples/async_file.rs (lines 24-30)
19fn main() -> Result<(), LogError> {
20 let directory = std::path::PathBuf::from("target/appcore-log-example");
21 std::fs::create_dir_all(&directory).map_err(|_| LogError::Io)?;
22
23 let path = directory.join("async.jsonl");
24 let file = Arc::new(FileSink::new(FileSinkConfig {
25 path: path.clone(),
26 max_bytes: LOG_SIZE_8_MIB,
27 sync_each_write: true,
28 retention: 2,
29 archive: None,
30 })?);
31
32 // This queue retains at most 256 events and 1 MiB, including active I/O.
33 let asynchronous = Arc::new(AsyncSink::new(
34 AsyncSinkConfig {
35 max_events: 256,
36 max_bytes: 1024 * 1024,
37 },
38 file,
39 )?);
40 let dispatcher = LogDispatcher::new(LogPolicy::default(), vec![asynchronous.clone()]);
41 let log = dispatcher.event(0, "application");
42
43 log.info("application started");
44 log.warn("storage response is slow");
45
46 // The lifecycle owner drains durable writes before exiting.
47 asynchronous.shutdown()?;
48 let path = std::fs::canonicalize(path).map_err(|_| LogError::Io)?;
49 println!("log written to {}", path.display());
50 Ok(())
51}Trait Implementations§
Auto Trait Implementations§
impl !Freeze for FileSink
impl !RefUnwindSafe for FileSink
impl Send for FileSink
impl Sync for FileSink
impl Unpin for FileSink
impl UnsafeUnpin for FileSink
impl UnwindSafe for FileSink
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more