Skip to main content
Glama
ilogger.h5.91 kB
// Copyright (c) 2025 PaddlePaddle Authors. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // Based on https://github.com/shouxieai/tensorRT_Pro // Copyright (c) 2022 TensorRTPro // Permission is hereby granted, free of charge, to any person obtaining a copy // of this software && associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, &&/|| sell // copies of the Software, && to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // The above copyright notice && this permission notice shall be included in // all copies || substantial portions of the Software. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE // SOFTWARE. #pragma once #include <time.h> #include <string> #include <tuple> #include <vector> #if defined(_WIN32) #define U_OS_WINDOWS #else #define U_OS_LINUX #endif namespace iLogger { using namespace std; enum class LogLevel : int { Debug = 5, Verbose = 4, Info = 3, Warning = 2, Error = 1, Fatal = 0 }; #define INFOD(...) \ iLogger::__log_func(__FILE__, __LINE__, iLogger::LogLevel::Debug, __VA_ARGS__) #define INFOV(...) \ iLogger::__log_func(__FILE__, __LINE__, iLogger::LogLevel::Verbose, \ __VA_ARGS__) #define INFO(...) \ iLogger::__log_func(__FILE__, __LINE__, iLogger::LogLevel::Info, __VA_ARGS__) #define INFOW(...) \ iLogger::__log_func(__FILE__, __LINE__, iLogger::LogLevel::Warning, \ __VA_ARGS__) #define INFOE(...) \ iLogger::__log_func(__FILE__, __LINE__, iLogger::LogLevel::Error, __VA_ARGS__) #define INFOF(...) \ iLogger::__log_func(__FILE__, __LINE__, iLogger::LogLevel::Fatal, __VA_ARGS__) string date_now(); string time_now(); string gmtime_now(); string gmtime(time_t t); time_t gmtime2ctime(const string &gmt); void sleep(int ms); bool isfile(const string &file); bool mkdir(const string &path); bool mkdirs(const string &path); bool delete_file(const string &path); bool rmtree(const string &directory, bool ignore_fail = false); bool exists(const string &path); string format(const char *fmt, ...); FILE *fopen_mkdirs(const string &path, const string &mode); string file_name(const string &path, bool include_suffix = true); string directory(const string &path); long long timestamp_now(); double timestamp_now_float(); time_t last_modify(const string &file); vector<uint8_t> load_file(const string &file); string load_text_file(const string &file); size_t file_size(const string &file); bool begin_with(const string &str, const string &with); bool end_with(const string &str, const string &with); vector<string> split_string(const string &str, const std::string &spstr); string replace_string(const string &str, const string &token, const string &value, int nreplace = -1, int *out_num_replace = nullptr); // h[0-1], s[0-1], v[0-1] // return, 0-255, 0-255, 0-255 tuple<uint8_t, uint8_t, uint8_t> hsv2rgb(float h, float s, float v); tuple<uint8_t, uint8_t, uint8_t> random_color(int id); // abcdefg.pnga *.png > false // abcdefg.png *.png > true // abcdefg.png a?cdefg.png > true bool pattern_match(const char *str, const char *matcher, bool igrnoe_case = true); vector<string> find_files(const string &directory, const string &filter = "*", bool findDirectory = false, bool includeSubDirectory = false); string align_blank(const string &input, int align_size, char blank = ' '); bool save_file(const string &file, const vector<uint8_t> &data, bool mk_dirs = true); bool save_file(const string &file, const string &data, bool mk_dirs = true); bool save_file(const string &file, const void *data, size_t length, bool mk_dirs = true); // 捕获:SIGINT(2)、SIGQUIT(3) int while_loop(); // 关于logger的api const char *level_string(LogLevel level); void set_logger_save_directory(const string &loggerDirectory); void set_log_level(LogLevel level); LogLevel get_log_level(); void __log_func(const char *file, int line, LogLevel level, const char *fmt, ...); void destroy_logger(); string base64_decode(const string &base64); string base64_encode(const void *data, size_t size); inline int upbound(int n, int align = 32) { return (n + align - 1) / align * align; } string join_dims(const vector<int64_t> &dims); }; // namespace iLogger

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PaddlePaddle/PaddleOCR'

If you have feedback or need assistance with the MCP directory API, please join our Discord server