stardis-solver

Solve coupled heat transfers
git clone git://git.meso-star.fr/stardis-solver.git
Log | Files | Refs | README | LICENSE

sdis_log.c (3724B)


      1 /* Copyright (C) 2016-2025 |Méso|Star> (contact@meso-star.com)
      2  *
      3  * This program is free software: you can redistribute it and/or modify
      4  * it under the terms of the GNU General Public License as published by
      5  * the Free Software Foundation, either version 3 of the License, or
      6  * (at your option) any later version.
      7  *
      8  * This program is distributed in the hope that it will be useful,
      9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
     10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
     11  * GNU General Public License for more details.
     12  *
     13  * You should have received a copy of the GNU General Public License
     14  * along with this program. If not, see <http://www.gnu.org/licenses/>. */
     15 
     16 #define _POSIX_C_SOURCE 200112L /* snprintf support */
     17 
     18 #include "sdis_device_c.h"
     19 #include "sdis_log.h"
     20 
     21 #include <rsys/logger.h>
     22 
     23 #include <stdarg.h>
     24 
     25 /*******************************************************************************
     26  * Helper functions
     27  ******************************************************************************/
     28 static void
     29 log_msg
     30   (const struct sdis_device* dev,
     31    const enum log_type stream,
     32    const char* msg,
     33    va_list vargs)
     34 {
     35   ASSERT(dev && msg);
     36   if(dev->verbose) {
     37     CHK(logger_vprint(dev->logger, stream, msg, vargs) == RES_OK);
     38   }
     39 }
     40 
     41 static void
     42 print_info(const char* msg, void* ctx)
     43 {
     44   struct sdis_device* dev = ctx;
     45 
     46   if(dev->no_escape_sequence) {
     47     fprintf(stderr, MSG_INFO_PREFIX_PLAIN_TEXT"%s", msg);
     48   } else {
     49     fprintf(stderr, MSG_INFO_PREFIX"%s", msg);
     50   }
     51 }
     52 
     53 static void
     54 print_err(const char* msg, void* ctx)
     55 {
     56   struct sdis_device* dev = ctx;
     57   if(dev->no_escape_sequence) {
     58     fprintf(stderr, MSG_ERROR_PREFIX_PLAIN_TEXT"%s", msg);
     59   } else {
     60     fprintf(stderr, MSG_ERROR_PREFIX"%s", msg);
     61   }
     62 }
     63 
     64 static void
     65 print_warn(const char* msg, void* ctx)
     66 {
     67   struct sdis_device* dev = ctx;
     68   if(dev->no_escape_sequence) {
     69     fprintf(stderr, MSG_WARNING_PREFIX_PLAIN_TEXT"%s", msg);
     70   } else {
     71     fprintf(stderr, MSG_WARNING_PREFIX"%s", msg);
     72   }
     73 }
     74 
     75 /*******************************************************************************
     76  * Local functions
     77  ******************************************************************************/
     78 res_T
     79 setup_log_default(struct sdis_device* dev)
     80 {
     81   res_T res = RES_OK;
     82   ASSERT(dev);
     83 
     84   res = logger_init(dev->allocator, &dev->logger__);
     85   if(res != RES_OK) {
     86     if(dev->verbose) print_err("Could not setup the logger.\n", NULL);
     87     goto error;
     88   }
     89   logger_set_stream(&dev->logger__, LOG_OUTPUT, print_info, dev);
     90   logger_set_stream(&dev->logger__, LOG_ERROR, print_err, dev);
     91   logger_set_stream(&dev->logger__, LOG_WARNING, print_warn, dev);
     92   dev->logger = &dev->logger__;
     93 
     94 exit:
     95   return res;
     96 error:
     97   goto exit;
     98 }
     99 
    100 void
    101 log_info(const struct sdis_device* dev, const char* msg, ...)
    102 {
    103   va_list vargs_list;
    104   ASSERT(dev && msg);
    105 
    106 #ifdef SDIS_ENABLE_MPI
    107   /* Log standard messages only on master process */
    108   if(dev->mpi_rank == 0)
    109 #endif
    110   {
    111     va_start(vargs_list, msg);
    112     log_msg(dev, LOG_OUTPUT, msg, vargs_list);
    113     va_end(vargs_list);
    114   }
    115 }
    116 
    117 void
    118 log_err(const struct sdis_device* dev, const char* msg, ...)
    119 {
    120   va_list vargs_list;
    121   ASSERT(dev && msg);
    122 
    123 #ifdef SDIS_ENABLE_MPI
    124   /* Log error messages only on master process */
    125   if(dev->mpi_rank == 0)
    126 #endif
    127   {
    128     va_start(vargs_list, msg);
    129     log_msg(dev, LOG_ERROR, msg, vargs_list);
    130     va_end(vargs_list);
    131   }
    132 }
    133 
    134 void
    135 log_warn(const struct sdis_device* dev, const char* msg, ...)
    136 {
    137   va_list vargs_list;
    138   ASSERT(dev && msg);
    139 
    140 #ifdef SDIS_ENABLE_MPI
    141   /* Log warnings only on master process */
    142   if(dev->mpi_rank == 0)
    143 #endif
    144   {
    145     va_start(vargs_list, msg);
    146     log_msg(dev, LOG_WARNING, msg, vargs_list);
    147     va_end(vargs_list);
    148   }
    149 }
    150