htrdr_log.c (3748B)
1 /* Copyright (C) 2018-2019, 2022-2025 Centre National de la Recherche Scientifique 2 * Copyright (C) 2020-2022 Institut Mines Télécom Albi-Carmaux 3 * Copyright (C) 2022-2025 Institut Pierre-Simon Laplace 4 * Copyright (C) 2022-2025 Institut de Physique du Globe de Paris 5 * Copyright (C) 2018-2025 |Méso|Star> (contact@meso-star.com) 6 * Copyright (C) 2022-2025 Observatoire de Paris 7 * Copyright (C) 2022-2025 Université de Reims Champagne-Ardenne 8 * Copyright (C) 2022-2025 Université de Versaille Saint-Quentin 9 * Copyright (C) 2018-2019, 2022-2025 Université Paul Sabatier 10 * 11 * This program is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU General Public License as published by 13 * the Free Software Foundation, either version 3 of the License, or 14 * (at your option) any later version. 15 * 16 * This program is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 19 * GNU General Public License for more details. 20 * 21 * You should have received a copy of the GNU General Public License 22 * along with this program. If not, see <http://www.gnu.org/licenses/>. */ 23 24 #include "core/htrdr.h" 25 #include "core/htrdr_c.h" 26 #include "core/htrdr_log.h" 27 28 #include <rsys/logger.h> 29 30 /******************************************************************************* 31 * Helper functions 32 ******************************************************************************/ 33 static void 34 print_out(const char* msg, void* ctx) 35 { 36 struct htrdr* htrdr = ctx; 37 ASSERT(msg); 38 39 /* Log standard message only on master process */ 40 if(htrdr->verbose && htrdr->mpi_rank == 0) { 41 fprintf(stderr, HTRDR_LOG_INFO_PREFIX"%s", msg); 42 } 43 } 44 45 static void 46 print_err(const char* msg, void* ctx) 47 { 48 struct htrdr* htrdr = ctx; 49 ASSERT(msg); 50 51 /* Log errors on all processes */ 52 if(htrdr->verbose) { 53 fprintf(stderr, HTRDR_LOG_ERROR_PREFIX"%s", msg); 54 } 55 } 56 57 static void 58 print_warn(const char* msg, void* ctx) 59 { 60 struct htrdr* htrdr = ctx; 61 ASSERT(msg && ctx); 62 63 /* Log warnings only on master process */ 64 if(htrdr->verbose && htrdr->mpi_rank == 0) { 65 fprintf(stderr, HTRDR_LOG_WARNING_PREFIX"%s", msg); 66 } 67 } 68 69 static void 70 log_msg 71 (struct htrdr* htrdr, 72 const enum log_type stream, 73 const char* msg, 74 va_list vargs) 75 { 76 ASSERT(htrdr && msg); 77 CHK(logger_vprint(&htrdr->logger, stream, msg, vargs) == RES_OK); 78 } 79 80 /******************************************************************************* 81 * Exported functions 82 ******************************************************************************/ 83 void 84 htrdr_log(struct htrdr* htrdr, const char* msg, ...) 85 { 86 va_list vargs_list; 87 ASSERT(htrdr && msg); 88 va_start(vargs_list, msg); 89 log_msg(htrdr, LOG_OUTPUT, msg, vargs_list); 90 va_end(vargs_list); 91 } 92 93 void 94 htrdr_log_err(struct htrdr* htrdr, const char* msg, ...) 95 { 96 va_list vargs_list; 97 ASSERT(htrdr && msg); 98 va_start(vargs_list, msg); 99 log_msg(htrdr, LOG_ERROR, msg, vargs_list); 100 va_end(vargs_list); 101 } 102 103 void 104 htrdr_log_warn(struct htrdr* htrdr, const char* msg, ...) 105 { 106 va_list vargs_list; 107 ASSERT(htrdr && msg); 108 va_start(vargs_list, msg); 109 log_msg(htrdr, LOG_WARNING, msg, vargs_list); 110 va_end(vargs_list); 111 } 112 113 /******************************************************************************* 114 * Local function 115 ******************************************************************************/ 116 void 117 setup_logger(struct htrdr* htrdr) 118 { 119 logger_init(htrdr->allocator, &htrdr->logger); 120 logger_set_stream(&htrdr->logger, LOG_OUTPUT, print_out, htrdr); 121 logger_set_stream(&htrdr->logger, LOG_ERROR, print_err, htrdr); 122 logger_set_stream(&htrdr->logger, LOG_WARNING, print_warn, htrdr); 123 }