| /* |
| * Copyright (C) 2001-2004 Sistina Software, Inc. All rights reserved. |
| * Copyright (C) 2004-2007 Red Hat, Inc. All rights reserved. |
| * |
| * This file is part of LVM2. |
| * |
| * This copyrighted material is made available to anyone wishing to use, |
| * modify, copy, or redistribute it subject to the terms and conditions |
| * of the GNU Lesser General Public License v.2.1. |
| * |
| * You should have received a copy of the GNU Lesser General Public License |
| * along with this program; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |
| */ |
| |
| #ifndef _LVM_LOGGING_H |
| #define _LVM_LOGGING_H |
| |
| __attribute__ ((format(printf, 5, 6))) |
| void print_log(int level, const char *file, int line, int dm_errno_or_class, |
| const char *format, ...); |
| |
| __attribute__ ((format(printf, 5, 6))) |
| void print_log_libdm(int level, const char *file, int line, int dm_errno_or_class, |
| const char *format, ...); |
| |
| #define LOG_LINE(l, x...) \ |
| print_log(l, __FILE__, __LINE__ , 0, ## x) |
| |
| #define LOG_LINE_WITH_ERRNO(l, e, x...) \ |
| print_log(l, __FILE__, __LINE__ , e, ## x) |
| |
| #define LOG_LINE_WITH_CLASS(l, c, x...) \ |
| print_log(l, __FILE__, __LINE__ , c, ## x) |
| |
| #include "log.h" |
| |
| typedef void (*lvm2_log_fn_t) (int level, const char *file, int line, |
| int dm_errno_or_class, const char *message); |
| |
| void init_log_fn(lvm2_log_fn_t log_fn); |
| |
| void init_indent(int indent); |
| void init_msg_prefix(const char *prefix); |
| |
| void init_log_file(const char *log_file, int append); |
| void unlink_log_file(int ret); |
| void init_log_direct(const char *log_file, int append); |
| void init_log_while_suspended(int log_while_suspended); |
| void init_abort_on_internal_errors(int fatal); |
| |
| void fin_log(void); |
| void release_log_memory(void); |
| void reset_log_duplicated(void); |
| |
| void init_syslog(int facility); |
| void fin_syslog(void); |
| |
| int error_message_produced(void); |
| void reset_lvm_errno(int store_errmsg); |
| int stored_errno(void); |
| const char *stored_errmsg(void); |
| const char *stored_errmsg_with_clear(void); |
| |
| /* Suppress messages to stdout/stderr (1) or everywhere (2) */ |
| /* Returns previous setting */ |
| int log_suppress(int suppress); |
| |
| /* Suppress messages to syslog */ |
| void syslog_suppress(int suppress); |
| |
| /* Hooks to handle logging through report. */ |
| typedef enum { |
| LOG_REPORT_CONTEXT_NULL, |
| LOG_REPORT_CONTEXT_PROCESSING, |
| LOG_REPORT_CONTEXT_COUNT |
| } log_report_context_t; |
| |
| typedef enum { |
| LOG_REPORT_OBJECT_TYPE_NULL, |
| LOG_REPORT_OBJECT_TYPE_ORPHAN, |
| LOG_REPORT_OBJECT_TYPE_PV, |
| LOG_REPORT_OBJECT_TYPE_LABEL, |
| LOG_REPORT_OBJECT_TYPE_VG, |
| LOG_REPORT_OBJECT_TYPE_LV, |
| LOG_REPORT_OBJECT_TYPE_COUNT |
| } log_report_object_type_t; |
| |
| typedef struct log_report { |
| struct dm_report *report; |
| log_report_context_t context; |
| log_report_object_type_t object_type; |
| const char *object_name; |
| const char *object_id; |
| const char *object_group; |
| const char *object_group_id; |
| } log_report_t; |
| |
| log_report_t log_get_report_state(void); |
| void log_restore_report_state(log_report_t log_report); |
| |
| void log_set_report(struct dm_report *report); |
| void log_set_report_context(log_report_context_t context); |
| void log_set_report_object_type(log_report_object_type_t object_type); |
| void log_set_report_object_group_and_group_id(const char *group, const char *group_id); |
| void log_set_report_object_name_and_id(const char *name, const char *id); |
| |
| const char *log_get_report_context_name(log_report_context_t context); |
| const char *log_get_report_object_type_name(log_report_object_type_t object_type); |
| |
| #endif |