mirror of
https://github.com/postgrespro/pg_probackup.git
synced 2024-11-30 09:47:53 +02:00
Added pgut/logger.h and pgut/logger.c for message logging
This commit is contained in:
parent
eb97837356
commit
69b41b2d94
3
Makefile
3
Makefile
@ -20,7 +20,8 @@ OBJS = backup.o \
|
|||||||
xlogreader.o \
|
xlogreader.o \
|
||||||
streamutil.o \
|
streamutil.o \
|
||||||
receivelog.o \
|
receivelog.o \
|
||||||
pgut/pgut.o
|
pgut/pgut.o \
|
||||||
|
pgut/logger.o
|
||||||
|
|
||||||
EXTRA_CLEAN = datapagemap.c datapagemap.h xlogreader.c receivelog.c receivelog.h streamutil.c streamutil.h logging.h
|
EXTRA_CLEAN = datapagemap.c datapagemap.h xlogreader.c receivelog.c receivelog.h streamutil.c streamutil.h logging.h
|
||||||
|
|
||||||
|
@ -15,22 +15,25 @@
|
|||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include "libpq-fe.h"
|
#include "libpq-fe.h"
|
||||||
|
|
||||||
#include "pgut/pgut.h"
|
|
||||||
#include "access/xlogdefs.h"
|
|
||||||
#include "access/xlog_internal.h"
|
|
||||||
#include "catalog/pg_control.h"
|
|
||||||
#include "utils/pg_crc.h"
|
|
||||||
#include "parray.h"
|
|
||||||
#include "datapagemap.h"
|
|
||||||
#include "storage/bufpage.h"
|
|
||||||
#include "storage/block.h"
|
|
||||||
#include "storage/checksum.h"
|
|
||||||
#include "access/timeline.h"
|
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
#include <sys/mman.h>
|
#include <sys/mman.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "access/timeline.h"
|
||||||
|
#include "access/xlogdefs.h"
|
||||||
|
#include "access/xlog_internal.h"
|
||||||
|
#include "catalog/pg_control.h"
|
||||||
|
#include "storage/block.h"
|
||||||
|
#include "storage/bufpage.h"
|
||||||
|
#include "storage/checksum.h"
|
||||||
|
#include "utils/pg_crc.h"
|
||||||
|
|
||||||
|
#include "pgut/pgut.h"
|
||||||
|
|
||||||
|
#include "datapagemap.h"
|
||||||
|
#include "parray.h"
|
||||||
|
|
||||||
|
|
||||||
/* Directory/File names */
|
/* Directory/File names */
|
||||||
#define DATABASE_DIR "database"
|
#define DATABASE_DIR "database"
|
||||||
#define BACKUPS_DIR "backups"
|
#define BACKUPS_DIR "backups"
|
||||||
|
82
pgut/logger.c
Normal file
82
pgut/logger.c
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* logger.c: - log events into csv-file or stderr.
|
||||||
|
*
|
||||||
|
* Portions Copyright (c) 2017-2017, Postgres Professional
|
||||||
|
*
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "postgres_fe.h"
|
||||||
|
|
||||||
|
#include "logger.h"
|
||||||
|
|
||||||
|
/* Logger parameters */
|
||||||
|
|
||||||
|
int log_destination = LOG_DESTINATION_STDERR;
|
||||||
|
int log_level = INFO;
|
||||||
|
bool quiet = false;
|
||||||
|
|
||||||
|
char *log_filename = NULL;
|
||||||
|
char *log_error_filename = NULL;
|
||||||
|
char *log_directory = NULL;
|
||||||
|
|
||||||
|
int log_rotation_size = 0;
|
||||||
|
int log_rotation_age = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* elog - log to stderr or to log file and exit if ERROR or FATAL
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
elog(int elevel, const char *fmt, ...)
|
||||||
|
{
|
||||||
|
va_list args;
|
||||||
|
|
||||||
|
/* Do not log message if severity level is less than log_level */
|
||||||
|
if (elevel < log_level)
|
||||||
|
{
|
||||||
|
/* But exit with code it severity level is higher than WARNING */
|
||||||
|
if (elevel > WARNING)
|
||||||
|
exit(elevel);
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (quiet && elevel < WARNING)
|
||||||
|
return;
|
||||||
|
|
||||||
|
switch (elevel)
|
||||||
|
{
|
||||||
|
case LOG:
|
||||||
|
fputs("LOG: ", stderr);
|
||||||
|
break;
|
||||||
|
case INFO:
|
||||||
|
fputs("INFO: ", stderr);
|
||||||
|
break;
|
||||||
|
case NOTICE:
|
||||||
|
fputs("NOTICE: ", stderr);
|
||||||
|
break;
|
||||||
|
case WARNING:
|
||||||
|
fputs("WARNING: ", stderr);
|
||||||
|
break;
|
||||||
|
case FATAL:
|
||||||
|
fputs("FATAL: ", stderr);
|
||||||
|
break;
|
||||||
|
case PANIC:
|
||||||
|
fputs("PANIC: ", stderr);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
if (elevel >= ERROR)
|
||||||
|
fputs("ERROR: ", stderr);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
va_start(args, fmt);
|
||||||
|
vfprintf(stderr, fmt, args);
|
||||||
|
fputc('\n', stderr);
|
||||||
|
fflush(stderr);
|
||||||
|
va_end(args);
|
||||||
|
|
||||||
|
if (elevel > WARNING)
|
||||||
|
exit(elevel);
|
||||||
|
}
|
43
pgut/logger.h
Normal file
43
pgut/logger.h
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
/*-------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* logger.h: - prototypes of logger functions.
|
||||||
|
*
|
||||||
|
* Portions Copyright (c) 2017-2017, Postgres Professional
|
||||||
|
*
|
||||||
|
*-------------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef LOGGER_H
|
||||||
|
#define LOGGER_H
|
||||||
|
|
||||||
|
/* Log destination bitmap */
|
||||||
|
#define LOG_DESTINATION_STDERR 1
|
||||||
|
#define LOG_DESTINATION_LOGFILE 2
|
||||||
|
|
||||||
|
/* Log level */
|
||||||
|
#define VERBOSE (-5)
|
||||||
|
#define LOG (-4)
|
||||||
|
#define INFO (-3)
|
||||||
|
#define NOTICE (-2)
|
||||||
|
#define WARNING (-1)
|
||||||
|
#define ERROR 1
|
||||||
|
#define FATAL 2
|
||||||
|
#define PANIC 3
|
||||||
|
|
||||||
|
/* Logger parameters */
|
||||||
|
|
||||||
|
extern int log_destination;
|
||||||
|
extern int log_level;
|
||||||
|
extern bool quiet;
|
||||||
|
|
||||||
|
extern char *log_filename;
|
||||||
|
extern char *log_error_filename;
|
||||||
|
extern char *log_directory;
|
||||||
|
|
||||||
|
extern int log_rotation_size;
|
||||||
|
extern int log_rotation_age;
|
||||||
|
|
||||||
|
#undef elog
|
||||||
|
extern void elog(int elevel, const char *fmt, ...) pg_attribute_printf(2, 3);
|
||||||
|
|
||||||
|
#endif /* LOGGER_H */
|
51
pgut/pgut.c
51
pgut/pgut.c
@ -15,6 +15,7 @@
|
|||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include "logger.h"
|
||||||
#include "pgut.h"
|
#include "pgut.h"
|
||||||
|
|
||||||
/* old gcc doesn't have LLONG_MAX. */
|
/* old gcc doesn't have LLONG_MAX. */
|
||||||
@ -34,7 +35,6 @@ const char *port = NULL;
|
|||||||
const char *username = NULL;
|
const char *username = NULL;
|
||||||
char *password = NULL;
|
char *password = NULL;
|
||||||
bool verbose = false;
|
bool verbose = false;
|
||||||
bool quiet = false;
|
|
||||||
bool prompt_password = true;
|
bool prompt_password = true;
|
||||||
|
|
||||||
/* Database connections */
|
/* Database connections */
|
||||||
@ -1032,55 +1032,6 @@ pgut_wait(int num, PGconn *connections[], struct timeval *timeout)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* elog - log to stderr and exit if ERROR or FATAL
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
elog(int elevel, const char *fmt, ...)
|
|
||||||
{
|
|
||||||
va_list args;
|
|
||||||
|
|
||||||
if (!verbose && elevel <= LOG)
|
|
||||||
return;
|
|
||||||
if (quiet && elevel < WARNING)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch (elevel)
|
|
||||||
{
|
|
||||||
case LOG:
|
|
||||||
fputs("LOG: ", stderr);
|
|
||||||
break;
|
|
||||||
case INFO:
|
|
||||||
fputs("INFO: ", stderr);
|
|
||||||
break;
|
|
||||||
case NOTICE:
|
|
||||||
fputs("NOTICE: ", stderr);
|
|
||||||
break;
|
|
||||||
case WARNING:
|
|
||||||
fputs("WARNING: ", stderr);
|
|
||||||
break;
|
|
||||||
case FATAL:
|
|
||||||
fputs("FATAL: ", stderr);
|
|
||||||
break;
|
|
||||||
case PANIC:
|
|
||||||
fputs("PANIC: ", stderr);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
if (elevel >= ERROR)
|
|
||||||
fputs("ERROR: ", stderr);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
va_start(args, fmt);
|
|
||||||
vfprintf(stderr, fmt, args);
|
|
||||||
fputc('\n', stderr);
|
|
||||||
fflush(stderr);
|
|
||||||
va_end(args);
|
|
||||||
|
|
||||||
if (elevel > 0)
|
|
||||||
exit_or_abort(elevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
void pg_log(eLogType type, const char *fmt, ...)
|
void pg_log(eLogType type, const char *fmt, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
|
20
pgut/pgut.h
20
pgut/pgut.h
@ -16,6 +16,8 @@
|
|||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
#include "logger.h"
|
||||||
|
|
||||||
#if !defined(C_H) && !defined(__cplusplus)
|
#if !defined(C_H) && !defined(__cplusplus)
|
||||||
#ifndef bool
|
#ifndef bool
|
||||||
typedef char bool;
|
typedef char bool;
|
||||||
@ -84,7 +86,6 @@ extern const char *port;
|
|||||||
extern const char *username;
|
extern const char *username;
|
||||||
extern char *password;
|
extern char *password;
|
||||||
extern bool verbose;
|
extern bool verbose;
|
||||||
extern bool quiet;
|
|
||||||
extern bool prompt_password;
|
extern bool prompt_password;
|
||||||
|
|
||||||
extern bool interrupted;
|
extern bool interrupted;
|
||||||
@ -126,23 +127,6 @@ extern char *strdup_trim(const char *str);
|
|||||||
*/
|
*/
|
||||||
extern FILE *pgut_fopen(const char *path, const char *mode, bool missing_ok);
|
extern FILE *pgut_fopen(const char *path, const char *mode, bool missing_ok);
|
||||||
|
|
||||||
/*
|
|
||||||
* elog
|
|
||||||
*/
|
|
||||||
#define VERBOSE (-5)
|
|
||||||
#define LOG (-4)
|
|
||||||
#define INFO (-3)
|
|
||||||
#define NOTICE (-2)
|
|
||||||
#define WARNING (-1)
|
|
||||||
#define ERROR 1
|
|
||||||
#define FATAL 2
|
|
||||||
#define PANIC 3
|
|
||||||
|
|
||||||
#undef elog
|
|
||||||
extern void
|
|
||||||
elog(int elevel, const char *fmt, ...)
|
|
||||||
__attribute__((format(printf, 2, 3)));
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Assert
|
* Assert
|
||||||
*/
|
*/
|
||||||
|
Loading…
Reference in New Issue
Block a user