2 Provides a log file to ease tracing the program.
4 Copyright (C) 2006-2024
5 Free Software Foundation, Inc.
8 Roland Illig <roland.illig@gmx.de>, 2006
9 Slava Zanko <slavazanko@gmail.com>, 2009, 2011
11 This file is part of the Midnight Commander.
13 The Midnight Commander is free software: you can redistribute it
14 and/or modify it under the terms of the GNU General Public License as
15 published by the Free Software Foundation, either version 3 of the License,
16 or (at your option) any later version.
18 The Midnight Commander is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
23 You should have received a copy of the GNU General Public License
24 along with this program. If not, see <http://www.gnu.org/licenses/>.
28 * \brief Source: provides a log file to ease tracing the program
36 #include "lib/global.h"
37 #include "lib/mcconfig.h"
38 #include "lib/fileloc.h"
42 /*** global variables ****************************************************************************/
44 /*** file scope macro definitions ****************************************************************/
46 #define CONFIG_GROUP_NAME "Development"
47 #define CONFIG_KEY_NAME "logging"
48 #define CONFIG_KEY_NAME_FILE "logfile"
50 /*** file scope type declarations ****************************************************************/
52 /*** forward declarations (file scope functions) *************************************************/
54 /*** file scope variables ************************************************************************/
56 static gboolean logging_initialized
= FALSE
;
57 static gboolean logging_enabled
= FALSE
;
59 /* --------------------------------------------------------------------------------------------- */
60 /*** file scope functions ************************************************************************/
61 /* --------------------------------------------------------------------------------------------- */
64 is_logging_enabled_from_env (void)
66 const char *env_is_enabled
;
68 env_is_enabled
= g_getenv ("MC_LOG_ENABLE");
69 if (env_is_enabled
== NULL
)
72 logging_enabled
= (*env_is_enabled
== '1' || g_ascii_strcasecmp (env_is_enabled
, "true") == 0);
73 logging_initialized
= TRUE
;
77 /* --------------------------------------------------------------------------------------------- */
80 is_logging_enabled (void)
83 if (logging_initialized
)
84 return logging_enabled
;
86 if (is_logging_enabled_from_env ())
87 return logging_enabled
;
90 mc_config_get_bool (mc_global
.main_config
, CONFIG_GROUP_NAME
, CONFIG_KEY_NAME
, FALSE
);
91 logging_initialized
= TRUE
;
93 return logging_enabled
;
96 /* --------------------------------------------------------------------------------------------- */
99 get_log_filename (void)
101 const char *env_filename
;
103 env_filename
= g_getenv ("MC_LOG_FILE");
104 if (env_filename
!= NULL
)
105 return g_strdup (env_filename
);
107 if (mc_config_has_param (mc_global
.main_config
, CONFIG_GROUP_NAME
, CONFIG_KEY_NAME_FILE
))
108 return mc_config_get_string (mc_global
.main_config
, CONFIG_GROUP_NAME
, CONFIG_KEY_NAME_FILE
,
111 return mc_config_get_full_path ("mc.log");
114 /* --------------------------------------------------------------------------------------------- */
118 mc_va_log (const char *fmt
, va_list args
)
122 logfilename
= get_log_filename ();
124 if (logfilename
!= NULL
)
128 f
= fopen (logfilename
, "a");
131 (void) vfprintf (f
, fmt
, args
);
134 g_free (logfilename
);
139 /* --------------------------------------------------------------------------------------------- */
140 /*** public functions ****************************************************************************/
141 /* --------------------------------------------------------------------------------------------- */
144 mc_log (const char *fmt
, ...)
148 if (!is_logging_enabled ())
151 va_start (args
, fmt
);
152 mc_va_log (fmt
, args
);
156 /* --------------------------------------------------------------------------------------------- */
159 mc_always_log (const char *fmt
, ...)
163 va_start (args
, fmt
);
164 mc_va_log (fmt
, args
);
168 /* --------------------------------------------------------------------------------------------- */