1*bb4ee6a4SAndroid Build Coastguard Worker // Copyright 2022 The ChromiumOS Authors 2*bb4ee6a4SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be 3*bb4ee6a4SAndroid Build Coastguard Worker // found in the LICENSE file. 4*bb4ee6a4SAndroid Build Coastguard Worker 5*bb4ee6a4SAndroid Build Coastguard Worker //! Facilities for sending log message to syslog. 6*bb4ee6a4SAndroid Build Coastguard Worker //! 7*bb4ee6a4SAndroid Build Coastguard Worker //! Every function exported by this module is thread-safe. Each function will silently fail until 8*bb4ee6a4SAndroid Build Coastguard Worker //! `syslog::init()` is called and returns `Ok`. 9*bb4ee6a4SAndroid Build Coastguard Worker //! 10*bb4ee6a4SAndroid Build Coastguard Worker //! # Examples 11*bb4ee6a4SAndroid Build Coastguard Worker //! 12*bb4ee6a4SAndroid Build Coastguard Worker //! ``` 13*bb4ee6a4SAndroid Build Coastguard Worker //! use base::{error, self, warn}; 14*bb4ee6a4SAndroid Build Coastguard Worker //! 15*bb4ee6a4SAndroid Build Coastguard Worker //! if let Err(e) = base::syslog::init() { 16*bb4ee6a4SAndroid Build Coastguard Worker //! println!("failed to initiailize syslog: {}", e); 17*bb4ee6a4SAndroid Build Coastguard Worker //! return; 18*bb4ee6a4SAndroid Build Coastguard Worker //! } 19*bb4ee6a4SAndroid Build Coastguard Worker //! warn!("this is your {} warning", "final"); 20*bb4ee6a4SAndroid Build Coastguard Worker //! error!("something went horribly wrong: {}", "out of RAMs"); 21*bb4ee6a4SAndroid Build Coastguard Worker //! ``` 22*bb4ee6a4SAndroid Build Coastguard Worker 23*bb4ee6a4SAndroid Build Coastguard Worker use crate::syslog::Error; 24*bb4ee6a4SAndroid Build Coastguard Worker use crate::syslog::Facility; 25*bb4ee6a4SAndroid Build Coastguard Worker use crate::syslog::Log; 26*bb4ee6a4SAndroid Build Coastguard Worker use crate::syslog::Syslog; 27*bb4ee6a4SAndroid Build Coastguard Worker use crate::RawDescriptor; 28*bb4ee6a4SAndroid Build Coastguard Worker 29*bb4ee6a4SAndroid Build Coastguard Worker // SAFETY: 30*bb4ee6a4SAndroid Build Coastguard Worker // On windows RawDescriptor is !Sync + !Send, but also on windows we don't do anything with them 31*bb4ee6a4SAndroid Build Coastguard Worker unsafe impl Sync for crate::syslog::State {} 32*bb4ee6a4SAndroid Build Coastguard Worker // SAFETY: See comments for impl Sync 33*bb4ee6a4SAndroid Build Coastguard Worker unsafe impl Send for crate::syslog::State {} 34*bb4ee6a4SAndroid Build Coastguard Worker 35*bb4ee6a4SAndroid Build Coastguard Worker pub struct PlatformSyslog {} 36*bb4ee6a4SAndroid Build Coastguard Worker 37*bb4ee6a4SAndroid Build Coastguard Worker impl Syslog for PlatformSyslog { new( _proc_name: String, _facility: Facility, ) -> Result<(Option<Box<dyn Log + Send>>, Option<RawDescriptor>), Error>38*bb4ee6a4SAndroid Build Coastguard Worker fn new( 39*bb4ee6a4SAndroid Build Coastguard Worker _proc_name: String, 40*bb4ee6a4SAndroid Build Coastguard Worker _facility: Facility, 41*bb4ee6a4SAndroid Build Coastguard Worker ) -> Result<(Option<Box<dyn Log + Send>>, Option<RawDescriptor>), Error> { 42*bb4ee6a4SAndroid Build Coastguard Worker Ok((None, None)) 43*bb4ee6a4SAndroid Build Coastguard Worker } 44*bb4ee6a4SAndroid Build Coastguard Worker } 45