goto error;
if (!(logd->handler = virLogHandlerNew(privileged,
+ config->max_size,
+ config->max_backups,
virLogDaemonInhibitor,
logd)))
goto error;
static virLogDaemonPtr
-virLogDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged)
+virLogDaemonNewPostExecRestart(virJSONValuePtr object, bool privileged,
+ virLogDaemonConfigPtr config)
{
virLogDaemonPtr logd;
virJSONValuePtr child;
if (!(logd->handler = virLogHandlerNewPostExecRestart(child,
privileged,
+ config->max_size,
+ config->max_backups,
virLogDaemonInhibitor,
logd)))
goto error;
virLogDaemonPostExecRestart(const char *state_file,
const char *pid_file,
int *pid_file_fd,
- bool privileged)
+ bool privileged,
+ virLogDaemonConfigPtr config)
{
const char *gotmagic;
char *wantmagic = NULL;
(*pid_file_fd = virPidFileAcquirePath(pid_file, false, getpid())) < 0)
goto cleanup;
- if (!(logDaemon = virLogDaemonNewPostExecRestart(object, privileged)))
+ if (!(logDaemon = virLogDaemonNewPostExecRestart(object,
+ privileged,
+ config)))
goto cleanup;
ret = 1;
if ((rv = virLogDaemonPostExecRestart(state_file,
pid_file,
&pid_file_fd,
- privileged)) < 0) {
+ privileged,
+ config)) < 0) {
ret = VIR_LOG_DAEMON_ERR_INIT;
goto cleanup;
}
return NULL;
data->max_clients = 1024;
+ data->max_size = 128 * 1024;
+ data->max_backups = 3;
return data;
}
GET_CONF_STR(conf, filename, log_outputs);
GET_CONF_UINT(conf, filename, max_clients);
+ GET_CONF_UINT(conf, filename, max_size);
+ GET_CONF_UINT(conf, filename, max_backups);
+
return 0;
error:
char *log_filters;
char *log_outputs;
int max_clients;
+
+ size_t max_backups;
+ size_t max_size;
};
#define VIR_FROM_THIS VIR_FROM_LOGGING
-#define DEFAULT_FILE_SIZE (128 * 1024)
-#define DEFAULT_MAX_BACKUP 3
#define DEFAULT_MODE 0600
typedef struct _virLogHandlerLogFile virLogHandlerLogFile;
virObjectLockable parent;
bool privileged;
+ size_t max_size;
+ size_t max_backups;
+
virLogHandlerLogFilePtr *files;
size_t nfiles;
virLogHandlerPtr
virLogHandlerNew(bool privileged,
+ size_t max_size,
+ size_t max_backups,
virLogHandlerShutdownInhibitor inhibitor,
void *opaque)
{
goto error;
handler->privileged = privileged;
+ handler->max_size = max_size;
+ handler->max_backups = max_backups;
handler->inhibitor = inhibitor;
handler->opaque = opaque;
}
if ((file->file = virRotatingFileWriterNew(path,
- DEFAULT_FILE_SIZE,
- DEFAULT_MAX_BACKUP,
+ handler->max_size,
+ handler->max_backups,
false,
DEFAULT_MODE)) == NULL)
goto error;
virLogHandlerPtr
virLogHandlerNewPostExecRestart(virJSONValuePtr object,
bool privileged,
+ size_t max_size,
+ size_t max_backups,
virLogHandlerShutdownInhibitor inhibitor,
void *opaque)
{
size_t i;
if (!(handler = virLogHandlerNew(privileged,
+ max_size,
+ max_backups,
inhibitor,
opaque)))
return NULL;
goto error;
if ((file->file = virRotatingFileWriterNew(path,
- DEFAULT_FILE_SIZE,
- DEFAULT_MAX_BACKUP,
+ handler->max_size,
+ handler->max_backups,
trunc,
DEFAULT_MODE)) == NULL)
goto error;
virObjectLock(handler);
- if (!(file = virRotatingFileReaderNew(path, DEFAULT_MAX_BACKUP)))
+ if (!(file = virRotatingFileReaderNew(path, handler->max_backups)))
goto error;
if (virRotatingFileReaderSeek(file, inode, offset) < 0)
if (!writer) {
if (!(newwriter = virRotatingFileWriterNew(path,
- DEFAULT_FILE_SIZE,
- DEFAULT_MAX_BACKUP,
+ handler->max_size,
+ handler->max_backups,
false,
DEFAULT_MODE)))
goto cleanup;
void *opaque);
virLogHandlerPtr virLogHandlerNew(bool privileged,
+ size_t max_size,
+ size_t max_backups,
virLogHandlerShutdownInhibitor inhibitor,
void *opaque);
virLogHandlerPtr virLogHandlerNewPostExecRestart(virJSONValuePtr child,
bool privileged,
+ size_t max_size,
+ size_t max_backups,
virLogHandlerShutdownInhibitor inhibitor,
void *opaque);
let conf = "log_level = 3
log_filters=\"3:remote 4:event\"
log_outputs=\"3:syslog:virtlogd\"
+max_size = 131072
+max_backups = 3
"
test Virtlogd.lns get conf =
{ "log_level" = "3" }
{ "log_filters" = "3:remote 4:event" }
{ "log_outputs" = "3:syslog:virtlogd" }
+ { "max_size" = "131072" }
+ { "max_backups" = "3" }
| str_entry "log_outputs"
| int_entry "log_buffer_size"
| int_entry "max_clients"
+ | int_entry "max_size"
+ | int_entry "max_backups"
(* Each enty in the config is one of the following three ... *)
let entry = logging_entry
# The maximum number of concurrent client connections to allow
# over all sockets combined.
#max_clients = 1024
+
+
+# Maximum file size before rolling over. Defaults to 128 KB
+#max_size = 131072
+
+# Maximum number of backup files to keep. Defaults to 3,
+# not including the primary active file
+#max_backups = 3