Слияние кода завершено, страница обновится автоматически
**1. Описание** 1) В данной папке содержатся исходные коды src и примеры файлов sample. 2) При компиляции src создаётся output, включающий iånclude и lib. 3) Используя output, lib и include, можно обратиться к sample, Makefile и code. 4) Уровни логирования: FATAL, WARNING, NOTICE, TRACE, DEBUG (в порядке убывания важности). 5) Для вывода логов используется MY_LOG_FATAL и другие функции, аналогичные printf. Это очень просто. **2. Использование API (см. mylog.h)** 1. Инициализация каталога для логов: ```c my_log_init(const char* log_path, const char* normal_path, const char* warn_fatal_path, const int log_level) ``` где: * *log_path* — путь к логам; * *normal_path* — каталог для обычных логов; * *warn_fatal_path* — каталог для аварийных логов; * *log_level* — уровень логирования. 2. Инициализация данных для многопоточного логирования: ```c my_log_thread_init() ``` 3. Установка идентификатора потока: ```c my_log_set_logid(logid) ``` Использовать после my_log_thread_init(). 4. Установка IP-адреса запроса: ```c my_log_set_reqip(reqip) ``` Использовать после my_log_thread_init(). 5. Установка модуля: ```c my_log_set_mod(mod) ``` Установить модуль для одного потока или использовать после my_log_thread_init(). 6. Установить тип времени выполнения: ```c my_log_set_time_type(time_type) ``` Использовать в одном потоке или после my_log_thread_init(). 7. Вывести журнал уровня FATAL: ```c MY_LOG_FATAL(logfmt, arg...) ``` Будет выводиться при уровне логирования >= 1. 8. Вывести журнал уровня WARNING: ```c MY_LOG_WARNING(logfmt, arg...) ``` Будет выводиться при уровне логирования >= 2. 9. Вывести журнал уровня NOTICE: ```c MY_LOG_NOTICE(logfmt, arg...) ``` Будет выводиться при уровне логирования >= 4. 10. Вывести журнал уровня TRACE: ```c MY_LOG_TRACE(logfmt, arg...) ``` Будет выводиться при уровне логирования >= 8. 11. Вывести журнал уровня DEBUG: ```c MY_LOG_DEBUG(logfmt, arg...) ``` Будет выводиться при уровне логирования >= 16. 12. Закрыть дескриптор журнала: ```c my_log_close(); ``` **3. Пример** Код: ```c #include "mylog.h" void* test_thread1(void*) { my_log_thread_init(); my_log_set_reqip("10.10.10.31"); my_log_set_time_type(TIME_TYPE_MSEC); for(int i=0; i<100; i++) { my_log_set_logid(i); MY_LOG_FATAL("thread 1 fatal is at %d, it's %s", i , "OK"); MY_LOG_WARNNING("thread 1 warning is at %d, it's %s", i , "OK"); MY_LOG_NOTICE("thread 1 notice is at %d, it's %s", i , "OK"); MY_LOG_TRACE("thread 1 trace is at %d, it's %s", i , "OK"); MY_LOG_DEBUG("thread 1 debug is at %d, it's %s", i , "OK"); sleep(1); } } void* test_thread2(void*) { my_log_thread_init(); for(int i=0; i<3; i++) { my_log_set_mod("test2"); MY_LOG_FATAL("thread 2 fatal is at %d, it's %s", i , "OK"); MY_LOG_WARNNING("thread 2 warning is at %d, it's %s", i , "OK"); MY_LOG_NOTICE("thread 2 notice is at %d, it's %s", i , "OK"); MY_LOG_TRACE("thread 2 trace is at %d, it's %s", i , "OK"); MY_LOG_DEBUG("thread 2 debug is at %d, it's %s", i , "OK"); sleep(1); } } int main() { my_log_init(".", "test.log", "test.log.wf", 16); MY_LOG_DEBUG("main begin"); pthread_t t1, t2; pthread_create(&t1, NULL, test_thread1, NULL); pthread_create(&t2, NULL, test_thread2, NULL); pthread_join(t1, NULL); pthread_join(t2, NULL); MY_LOG_DEBUG("main end"); } ``` Результат выполнения: 
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )