file_logging/
file_logging.rs1use appcore_log::{
17 FileArchiveConfig, FileSinkConfig, LogConfigError, LogError, LogOutputMode, LogPolicy,
18 LoggerConfig, Verbosity, LOG_SIZE_8_MIB,
19};
20use std::path::PathBuf;
21
22fn main() -> Result<(), appcore_log::LogConfigError> {
23 let output_directory = PathBuf::from("target/appcore-log-example");
25 std::fs::create_dir_all(&output_directory).map_err(|_| LogConfigError::Sink(LogError::Io))?;
26
27 let active_file = output_directory.join("application.jsonl");
28
29 let archive_directory = output_directory.join("archive");
32 let mut policy = LogPolicy::new(Verbosity::V4);
33 policy.set_component("sync", Verbosity::V8);
34
35 let logger = LoggerConfig {
36 policy,
37 output: LogOutputMode::TerminalAndFile,
38 file: Some(FileSinkConfig {
39 path: active_file,
40 max_bytes: LOG_SIZE_8_MIB,
41 sync_each_write: false,
42 retention: 2,
43 archive: Some(FileArchiveConfig {
44 directory: archive_directory,
45 max_files: 120,
46 }),
47 }),
48 ..LoggerConfig::default()
49 }
50 .build()?;
51
52 let application = logger.dispatcher().event(0, "application");
53 let sync = logger.dispatcher().event(1, "sync.transport");
54
55 application.info("application ready; inspect target/appcore-log-example/application.jsonl");
56
57 sync.verbosity(7).debug("replication batch sent");
59
60 sync.warn("peer response was delayed");
61
62 let stats = logger.dispatcher().stats();
63 assert_eq!(stats.sink_failures, 0);
64
65 Ok(())
66}