1fb299fa2Sopenharmony_ci/* 2fb299fa2Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3fb299fa2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4fb299fa2Sopenharmony_ci * you may not use this file except in compliance with the License. 5fb299fa2Sopenharmony_ci * You may obtain a copy of the License at 6fb299fa2Sopenharmony_ci * 7fb299fa2Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8fb299fa2Sopenharmony_ci * 9fb299fa2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10fb299fa2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11fb299fa2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12fb299fa2Sopenharmony_ci * See the License for the specific language governing permissions and 13fb299fa2Sopenharmony_ci * limitations under the License. 14fb299fa2Sopenharmony_ci */ 15fb299fa2Sopenharmony_ci 16fb299fa2Sopenharmony_ci/// macro wrapper for Updater::UpdaterLogger in updater 17fb299fa2Sopenharmony_ci/// 18fb299fa2Sopenharmony_ci/// # intro 19fb299fa2Sopenharmony_ci/// support 5 level DEBUG, INFO, WARNING, ERROR, FATAL 20fb299fa2Sopenharmony_ci/// 21fb299fa2Sopenharmony_ci/// # usage: 22fb299fa2Sopenharmony_ci/// ``` 23fb299fa2Sopenharmony_ci/// let hello = "hello".to_string(); 24fb299fa2Sopenharmony_ci/// updaterlog!(INFO, "this is a info log, {:?}", hello); 25fb299fa2Sopenharmony_ci/// ``` 26fb299fa2Sopenharmony_ci/// 27fb299fa2Sopenharmony_ci/// # note: 28fb299fa2Sopenharmony_ci/// InitLogger / SetLevel is done in C++ code. if you need to 29fb299fa2Sopenharmony_ci/// change log threshold, please add ffi interface in ffi.rs. 30fb299fa2Sopenharmony_ci/// 31fb299fa2Sopenharmony_ci#[macro_export] 32fb299fa2Sopenharmony_cimacro_rules! updaterlog { 33fb299fa2Sopenharmony_ci ($level:tt, $($arg:tt)* ) => ( 34fb299fa2Sopenharmony_ci let log_str = format!($($arg)*); 35fb299fa2Sopenharmony_ci let file_name_str = match std::path::Path::new(file!()).file_name() { 36fb299fa2Sopenharmony_ci Some(name_os_str) => { name_os_str.to_str() }, 37fb299fa2Sopenharmony_ci None => { None } 38fb299fa2Sopenharmony_ci }; 39fb299fa2Sopenharmony_ci let file_name = file_name_str.unwrap_or("unknown"); 40fb299fa2Sopenharmony_ci let c_file_name = std::ffi::CString::new(file_name).expect("unknown"); 41fb299fa2Sopenharmony_ci let c_log_str = std::ffi::CString::new(log_str).expect("default log"); 42fb299fa2Sopenharmony_ci // can use CString::new(...).expect(...) because file_name and log_str can't have internal 0 byte 43fb299fa2Sopenharmony_ci unsafe { 44fb299fa2Sopenharmony_ci $crate::ffi::Logger( 45fb299fa2Sopenharmony_ci $crate::ffi::LogLevel::$level as i32, 46fb299fa2Sopenharmony_ci c_file_name.as_ptr() as *const std::ffi::c_char, 47fb299fa2Sopenharmony_ci line!() as i32, 48fb299fa2Sopenharmony_ci c_log_str.as_ptr() as *const std::ffi::c_char 49fb299fa2Sopenharmony_ci ) 50fb299fa2Sopenharmony_ci }; 51fb299fa2Sopenharmony_ci ) 52fb299fa2Sopenharmony_ci}