165 GError *error = NULL;
176 GSList *log_domain_list = NULL;
179 key_file = g_key_file_new ();
180 flags = G_KEY_FILE_KEEP_COMMENTS | G_KEY_FILE_KEEP_TRANSLATIONS;
183 if (!g_key_file_load_from_file (key_file, config_file, flags, &error))
185 g_error (
"%s: %s", config_file, error->message);
189 groups = g_key_file_get_groups (key_file, NULL);
194 while (*group != NULL)
201 if (g_key_file_has_key (key_file, *group,
"prepend", &error))
205 g_key_file_get_value (key_file, *group,
"prepend", &error));
209 if (g_key_file_has_key (key_file, *group,
"separator", &error))
213 g_key_file_get_value (key_file, *group,
"separator", &error));
217 if (g_key_file_has_key (key_file, *group,
"prepend_time_format", &error))
221 g_key_file_get_value (key_file, *group,
"prepend_time_format",
226 if (g_key_file_has_key (key_file, *group,
"file", &error))
230 g_key_file_get_value (key_file, *group,
"file", &error));
234 if (g_key_file_has_key (key_file, *group,
"level", &error))
238 level = g_key_file_get_value (key_file, *group,
"level", &error);
239 level = g_strchug (level);
246 if (g_key_file_has_key (key_file, *group,
"syslog_facility", &error))
250 g_key_file_get_value (key_file, *group,
"syslog_facility", &error));
254 g_strdup (
"local0"));
257 if (g_key_file_has_key (key_file, *group,
"syslog_ident", &error))
261 g_key_file_get_value (key_file, *group,
"syslog_ident", &error));
268 log_domain_list = g_slist_prepend (log_domain_list, log_domain_entry);
275 g_key_file_free (key_file);
277 return log_domain_list;
429 const char *message, gpointer gvm_log_config_list)
440 GSList *log_domain_list_tmp;
444 GIOChannel *channel = NULL;
445 GError *error = NULL;
450 gchar *prepend_format =
"%t %s %p - ";
451 gchar *time_format =
"%Y-%m-%d %Hh%M.%S %Z";
452 gchar *log_separator =
":";
453 gchar *log_file =
"-";
454 GLogLevelFlags default_level = G_LOG_LEVEL_DEBUG;
455 gchar *syslog_facility =
"local0";
456 gchar *syslog_ident = NULL;
462 if (gvm_log_config_list != NULL && log_domain != NULL)
465 log_domain_list_tmp = (GSList *) gvm_log_config_list;
467 while (log_domain_list_tmp != NULL)
471 entry = log_domain_list_tmp->data;
479 log_domain_entry = entry;
505 log_domain_list_tmp = g_slist_next (log_domain_list_tmp);
512 if (gvm_log_config_list != NULL && log_domain != NULL)
515 log_domain_list_tmp = (GSList *) gvm_log_config_list;
517 while (log_domain_list_tmp != NULL)
521 entry = log_domain_list_tmp->data;
529 log_domain_entry = entry;
558 log_domain_list_tmp = g_slist_next (log_domain_list_tmp);
565 if (default_level < log_level)
569 prepend_buf = g_strdup (
"");
572 tmp = prepend_format;
577 if ((*tmp ==
'%') && (*(tmp + 1) ==
'p'))
582 g_strdup_printf (
"%s%d%s%s", prepend_buf, (
int) getpid (),
590 g_strdup_printf (
"%s%d", prepend_buf, (
int) getpid ());
593 g_free (prepend_buf);
595 prepend_buf = prepend_tmp;
599 else if ((*tmp ==
'%') && (*(tmp + 1) ==
't'))
604 prepend_tmp1 =
get_time (time_format);
607 prepend_tmp1 = g_strdup (
"");
612 prepend_tmp = g_strdup_printf (
"%s%s", prepend_buf, prepend_tmp1);
614 g_free (prepend_tmp1);
616 g_free (prepend_buf);
618 prepend_buf = prepend_tmp;
622 else if ((*tmp ==
'%') && (*(tmp + 1) ==
's'))
627 prepend_tmp = g_strdup_printf (
"%s%s", prepend_buf, log_separator);
629 g_free (prepend_buf);
631 prepend_buf = prepend_tmp;
647 case G_LOG_FLAG_RECURSION:
648 prepend = g_strdup_printf (
"RECURSION%s%s", log_separator, prepend_buf);
651 case G_LOG_FLAG_FATAL:
652 prepend = g_strdup_printf (
"FATAL%s%s", log_separator, prepend_buf);
655 case G_LOG_LEVEL_ERROR:
656 prepend = g_strdup_printf (
"ERROR%s%s", log_separator, prepend_buf);
659 case G_LOG_LEVEL_CRITICAL:
660 prepend = g_strdup_printf (
"CRITICAL%s%s", log_separator, prepend_buf);
663 case G_LOG_LEVEL_WARNING:
664 prepend = g_strdup_printf (
"WARNING%s%s", log_separator, prepend_buf);
667 case G_LOG_LEVEL_MESSAGE:
668 prepend = g_strdup_printf (
"MESSAGE%s%s", log_separator, prepend_buf);
671 case G_LOG_LEVEL_INFO:
672 prepend = g_strdup_printf (
" INFO%s%s", log_separator, prepend_buf);
675 case G_LOG_LEVEL_DEBUG:
676 prepend = g_strdup_printf (
" DEBUG%s%s", log_separator, prepend_buf);
680 prepend = g_strdup_printf (
"UNKNOWN%s%s", log_separator, prepend_buf);
689 messagelen = message ? strlen (message) : 0;
690 if (messagelen > 1 && message[messagelen - 1] ==
'\n')
692 tmpstr = g_strdup_printf (
"%s%s%s%s %.*s\n", log_domain ? log_domain :
"",
693 log_separator, prepend, log_separator, messagelen,
697 if (log_level <= G_LOG_LEVEL_WARNING)
702 if (!log_file || g_ascii_strcasecmp (log_file,
"-") == 0
703 || !g_strcmp0 (log_file,
""))
705 fprintf (stderr,
"%s", tmpstr);
709 else if (g_ascii_strcasecmp (log_file,
"syslog") == 0)
712 int syslog_level = LOG_INFO;
714 openlog (syslog_ident, LOG_CONS | LOG_PID | LOG_NDELAY, facility);
718 case G_LOG_FLAG_FATAL:
719 syslog_level = LOG_ALERT;
721 case G_LOG_LEVEL_ERROR:
722 syslog_level = LOG_ERR;
724 case G_LOG_LEVEL_CRITICAL:
725 syslog_level = LOG_CRIT;
727 case G_LOG_LEVEL_WARNING:
728 syslog_level = LOG_WARNING;
730 case G_LOG_LEVEL_MESSAGE:
731 syslog_level = LOG_NOTICE;
733 case G_LOG_LEVEL_INFO:
734 syslog_level = LOG_INFO;
736 case G_LOG_LEVEL_DEBUG:
737 syslog_level = LOG_DEBUG;
740 syslog_level = LOG_INFO;
747 if (messagelen > 1000)
750 char *message_aux, *message_aux2;
753 message_aux2 = g_strdup (message);
754 message_aux = message_aux2;
755 for (pos = 0; pos <= messagelen; pos = pos +
sizeof (buffer) - 1)
757 memcpy (buffer, message_aux,
sizeof (buffer) - 1);
758 buffer[
sizeof (buffer) - 1] =
'\0';
759 message_aux = &(message_aux[
sizeof (buffer) - 1]);
760 syslog (syslog_level,
"%s", buffer);
762 g_free (message_aux2);
765 syslog (syslog_level,
"%s", message);
776 channel = g_io_channel_new_file (log_file,
"a", &error);
779 gchar *log = g_strdup (log_file);
780 gchar *dir = dirname (log);
786 if (error->code != G_FILE_ERROR_NOENT)
787 fprintf (stderr,
"Can not open '%s' logfile: %s\n", log_file,
789 g_error_free (error);
792 if (g_mkdir_with_parents (dir, 0755))
794 g_warning (
"Failed to create log file directory %s: %s", dir,
798 g_free (prepend_buf);
805 channel = g_io_channel_new_file (log_file,
"a", &error);
808 g_error (
"Can not open '%s' logfile: %s", log_file,
814 if (log_domain_entry != NULL)
817 g_io_channel_write_chars (channel, (
const gchar *) tmpstr, -1, NULL,
819 g_io_channel_flush (channel, NULL);
823 g_free (prepend_buf);
911 GLogFunc default_log_func,
912 GLogFunc default_domain_log_func)
914 GSList *log_domain_list_tmp;
918 if (gvm_log_config_list != NULL)
921 log_domain_list_tmp = (GSList *) gvm_log_config_list;
923 while (log_domain_list_tmp != NULL)
928 log_domain_entry = log_domain_list_tmp->data;
935 log_domain_list_tmp = g_slist_next (log_domain_list_tmp);
939 if (g_ascii_strcasecmp (
944 (GLogLevelFlags) (G_LOG_LEVEL_DEBUG | G_LOG_LEVEL_INFO
945 | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_WARNING
946 | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_ERROR
947 | G_LOG_FLAG_FATAL | G_LOG_FLAG_RECURSION),
948 (GLogFunc) log_func, gvm_log_config_list);
952 g_log_set_default_handler (default_log_func, gvm_log_config_list);
956 log_domain_list_tmp = g_slist_next (log_domain_list_tmp);
961 (GLogLevelFlags) (G_LOG_LEVEL_DEBUG | G_LOG_LEVEL_INFO | G_LOG_LEVEL_MESSAGE
962 | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL
963 | G_LOG_LEVEL_ERROR | G_LOG_FLAG_FATAL
964 | G_LOG_FLAG_RECURSION),
965 default_domain_log_func, gvm_log_config_list);
void gvm_sentry_log(const char *message)
Send a message to Sentry server if it was initialized.
Implementation of sentry methods.
void gvm_logging_domain_set_prepend_separator(gvm_logging_domain_t *log_domain, gchar *prepend_separator)
Sets the prepend separator for the logging domain.
GIOChannel * gvm_logging_domain_get_log_channel(gvm_logging_domain_t *log_domain)
void gvm_logging_domain_set_log_file(gvm_logging_domain_t *log_domain, gchar *log_file)
Sets the log file for the logging domain.
void gvm_logging_domain_set_syslog_ident(gvm_logging_domain_t *log_domain, gchar *syslog_ident)
Sets the syslog ident for the logging domain.
void gvm_logging_domain_set_prepend_time_format(gvm_logging_domain_t *log_domain, gchar *prepend_time_format)
Sets the prepend time format for the logging domain.
void gvm_logging_domain_set_syslog_facility(gvm_logging_domain_t *log_domain, gchar *syslog_facility)
Sets the syslog facility for the logging domain.
GLogLevelFlags * gvm_logging_domain_get_default_level(gvm_logging_domain_t *log_domain)
gvm_logging_domain_t * gvm_logging_domain_new(gchar *log_domain)
Function to initialize logging instance.
gchar * gvm_logging_domain_get_syslog_ident(gvm_logging_domain_t *log_domain)
void gvm_logging_domain_set_log_channel(gvm_logging_domain_t *log_domain, GIOChannel *log_channel)
Sets the log channel for the logging domain.
void gvm_logging_domain_free(gvm_logging_domain_t *log_domain)
Frees the resources associated with the given logging domain.
gchar * gvm_logging_domain_get_log_file(gvm_logging_domain_t *log_domain)
void gvm_logging_domain_set_prepend_string(gvm_logging_domain_t *log_domain, gchar *prepend_string)
Sets the preprend string for the logging domain.
gchar * gvm_logging_domain_get_log_domain(gvm_logging_domain_t *log_domain)
void gvm_logging_domain_set_default_level(gvm_logging_domain_t *log_domain, GLogLevelFlags default_level)
Sets the default log level for the logging domain.
gchar * gvm_logging_domain_get_prepend_separator(gvm_logging_domain_t *log_domain)
gchar * gvm_logging_domain_get_prepend_string(gvm_logging_domain_t *log_domain)
gchar * gvm_logging_domain_get_syslog_facility(gvm_logging_domain_t *log_domain)
Implementation of logging domain handling.