pub struct EmergencyDiagnostics { /* private fields */ }Expand description
Startup owner: at most one independent writer per process. No join on Drop.
Implementations§
Source§impl EmergencyDiagnostics
impl EmergencyDiagnostics
Sourcepub fn start(config: &FileLoggingConfig) -> Result<Self, EmergencyInitError>
pub fn start(config: &FileLoggingConfig) -> Result<Self, EmergencyInitError>
Directory setup is performed by the worker, never the submitting request. Callers must check snapshot/written, not equate successful start with IO readiness.
Examples found in repository?
examples/diagnostic_source.rs (line 32)
29fn main() {
30 // The application must pass its already resolved logging.directory here.
31 let mut output =
32 EmergencyDiagnostics::start(&FileLoggingConfig::default()).expect("emergency worker");
33 let error = source_failure(&std::io::Error::from_raw_os_error(2));
34 if let Some(diagnostic) = error.diagnostic() {
35 let _admission_only = output.handle().submit(diagnostic);
36 }
37 // Illustrative bounded host wait; Runtime must use its EXISTING deadline.
38 let deadline = std::time::Instant::now() + std::time::Duration::from_secs(1);
39 while output.shutdown() == DiagnosticShutdown::Pending && std::time::Instant::now() < deadline {
40 std::thread::sleep(std::time::Duration::from_millis(1));
41 }
42 // Inspect written/first_failure + target; Enqueued alone never proves delivery.
43 let _status = output.snapshot();
44}Sourcepub fn start_checked(
config: &FileLoggingConfig,
) -> Result<Self, EmergencyInitError>
pub fn start_checked( config: &FileLoggingConfig, ) -> Result<Self, EmergencyInitError>
Startup preopens the verified target while its raw I/O error can still be written to the independent bootstrap original file.
Sourcepub fn source_output(&self) -> Option<SourceOutput>
pub fn source_output(&self) -> Option<SourceOutput>
Issue the formal output capability only after checked startup opened the selected controlled file. A later writer failure is reported by the synchronous original write rather than by this capability.
Sourcepub fn handle(&self) -> EmergencyDiagnosticHandle
pub fn handle(&self) -> EmergencyDiagnosticHandle
Examples found in repository?
examples/diagnostic_source.rs (line 35)
29fn main() {
30 // The application must pass its already resolved logging.directory here.
31 let mut output =
32 EmergencyDiagnostics::start(&FileLoggingConfig::default()).expect("emergency worker");
33 let error = source_failure(&std::io::Error::from_raw_os_error(2));
34 if let Some(diagnostic) = error.diagnostic() {
35 let _admission_only = output.handle().submit(diagnostic);
36 }
37 // Illustrative bounded host wait; Runtime must use its EXISTING deadline.
38 let deadline = std::time::Instant::now() + std::time::Duration::from_secs(1);
39 while output.shutdown() == DiagnosticShutdown::Pending && std::time::Instant::now() < deadline {
40 std::thread::sleep(std::time::Duration::from_millis(1));
41 }
42 // Inspect written/first_failure + target; Enqueued alone never proves delivery.
43 let _status = output.snapshot();
44}pub fn target(&self) -> &Path
Sourcepub fn snapshot(&self) -> DiagnosticOutputSnapshot
pub fn snapshot(&self) -> DiagnosticOutputSnapshot
Examples found in repository?
examples/diagnostic_source.rs (line 43)
29fn main() {
30 // The application must pass its already resolved logging.directory here.
31 let mut output =
32 EmergencyDiagnostics::start(&FileLoggingConfig::default()).expect("emergency worker");
33 let error = source_failure(&std::io::Error::from_raw_os_error(2));
34 if let Some(diagnostic) = error.diagnostic() {
35 let _admission_only = output.handle().submit(diagnostic);
36 }
37 // Illustrative bounded host wait; Runtime must use its EXISTING deadline.
38 let deadline = std::time::Instant::now() + std::time::Duration::from_secs(1);
39 while output.shutdown() == DiagnosticShutdown::Pending && std::time::Instant::now() < deadline {
40 std::thread::sleep(std::time::Duration::from_millis(1));
41 }
42 // Inspect written/first_failure + target; Enqueued alone never proves delivery.
43 let _status = output.snapshot();
44}Sourcepub fn shutdown(&mut self) -> DiagnosticShutdown
pub fn shutdown(&mut self) -> DiagnosticShutdown
Call using the EXISTING lifecycle deadline; Pending is not a new budget.
Examples found in repository?
examples/diagnostic_source.rs (line 39)
29fn main() {
30 // The application must pass its already resolved logging.directory here.
31 let mut output =
32 EmergencyDiagnostics::start(&FileLoggingConfig::default()).expect("emergency worker");
33 let error = source_failure(&std::io::Error::from_raw_os_error(2));
34 if let Some(diagnostic) = error.diagnostic() {
35 let _admission_only = output.handle().submit(diagnostic);
36 }
37 // Illustrative bounded host wait; Runtime must use its EXISTING deadline.
38 let deadline = std::time::Instant::now() + std::time::Duration::from_secs(1);
39 while output.shutdown() == DiagnosticShutdown::Pending && std::time::Instant::now() < deadline {
40 std::thread::sleep(std::time::Duration::from_millis(1));
41 }
42 // Inspect written/first_failure + target; Enqueued alone never proves delivery.
43 let _status = output.snapshot();
44}Trait Implementations§
Source§impl Drop for EmergencyDiagnostics
impl Drop for EmergencyDiagnostics
Auto Trait Implementations§
impl !RefUnwindSafe for EmergencyDiagnostics
impl !UnwindSafe for EmergencyDiagnostics
impl Freeze for EmergencyDiagnostics
impl Send for EmergencyDiagnostics
impl Sync for EmergencyDiagnostics
impl Unpin for EmergencyDiagnostics
impl UnsafeUnpin for EmergencyDiagnostics
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