2008-10-30 20:27:28 +03:00
/*
* 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 ,
2016-01-21 13:49:46 +03:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2008-10-30 20:27:28 +03:00
*/
# ifndef _LVM_LOGGING_H
# define _LVM_LOGGING_H
2016-07-08 17:47:51 +03:00
# include "lvm-file.h"
2015-10-09 22:37:12 +03:00
__attribute__ ( ( format ( printf , 5 , 6 ) ) )
2013-01-08 02:25:19 +04:00
void print_log ( int level , const char * file , int line , int dm_errno_or_class ,
2015-10-09 22:37:12 +03:00
const char * format , . . . ) ;
2008-10-30 20:27:28 +03:00
2016-06-23 14:55:39 +03:00
__attribute__ ( ( format ( printf , 5 , 6 ) ) )
void print_log_libdm ( int level , const char * file , int line , int dm_errno_or_class ,
const char * format , . . . ) ;
2009-07-16 04:52:06 +04:00
# define LOG_LINE(l, x...) \
2009-07-16 07:07:45 +04:00
print_log ( l , __FILE__ , __LINE__ , 0 , # # x )
2009-07-16 04:52:06 +04:00
# define LOG_LINE_WITH_ERRNO(l, e, x...) \
print_log ( l , __FILE__ , __LINE__ , e , # # x )
2008-10-30 20:27:28 +03:00
2013-01-08 02:25:19 +04:00
# define LOG_LINE_WITH_CLASS(l, c, x...) \
print_log ( l , __FILE__ , __LINE__ , c , # # x )
2008-10-30 20:27:28 +03:00
# include "log.h"
2016-07-08 17:47:51 +03:00
int init_custom_log_streams ( struct custom_fds * custom_fds ) ;
int reopen_standard_stream ( FILE * * stream , const char * mode ) ;
2008-10-30 20:27:28 +03:00
typedef void ( * lvm2_log_fn_t ) ( int level , const char * file , int line ,
2013-01-08 02:25:19 +04:00
int dm_errno_or_class , const char * message ) ;
2008-10-30 20:27:28 +03:00
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 ) ;
2015-04-20 11:04:18 +03:00
void unlink_log_file ( int ret ) ;
2008-10-30 20:27:28 +03:00
void init_log_direct ( const char * log_file , int append ) ;
void init_log_while_suspended ( int log_while_suspended ) ;
2009-11-30 20:17:11 +03:00
void init_abort_on_internal_errors ( int fatal ) ;
2008-10-30 20:27:28 +03:00
void fin_log ( void ) ;
void release_log_memory ( void ) ;
2010-05-06 02:37:52 +04:00
void reset_log_duplicated ( void ) ;
2008-10-30 20:27:28 +03:00
void init_syslog ( int facility ) ;
void fin_syslog ( void ) ;
int error_message_produced ( void ) ;
2009-07-16 03:57:54 +04:00
void reset_lvm_errno ( int store_errmsg ) ;
2009-07-16 04:36:59 +04:00
int stored_errno ( void ) ;
const char * stored_errmsg ( void ) ;
2013-09-26 21:19:18 +04:00
const char * stored_errmsg_with_clear ( void ) ;
2008-10-30 20:27:28 +03:00
/* 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 ) ;
2016-05-03 12:46:52 +03:00
/* Hooks to handle logging through report. */
typedef enum {
LOG_REPORT_CONTEXT_NULL ,
2016-07-25 13:20:22 +03:00
LOG_REPORT_CONTEXT_SHELL ,
2016-05-03 12:46:52 +03:00
LOG_REPORT_CONTEXT_PROCESSING ,
LOG_REPORT_CONTEXT_COUNT
} log_report_context_t ;
typedef enum {
LOG_REPORT_OBJECT_TYPE_NULL ,
2016-07-25 13:20:22 +03:00
LOG_REPORT_OBJECT_TYPE_CMD ,
2016-06-14 14:21:53 +03:00
LOG_REPORT_OBJECT_TYPE_ORPHAN ,
2016-05-03 12:46:52 +03:00
LOG_REPORT_OBJECT_TYPE_PV ,
2016-06-20 14:46:35 +03:00
LOG_REPORT_OBJECT_TYPE_LABEL ,
2016-05-03 12:46:52 +03:00
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 ;
2016-07-25 13:20:22 +03:00
# define LOG_STATUS_NAME "status"
# define LOG_STATUS_SUCCESS "success"
# define LOG_STATUS_FAILURE "failure"
2016-05-03 12:46:52 +03:00
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 ) ;
2008-10-30 20:27:28 +03:00
# endif