Patch from Fillod Stephane:
You will find in the attached file "syslog.patch" a patch which adds config options to set at compile time the size of the circular buffer, and some documentation update.
This commit is contained in:
parent
3752d337b3
commit
d4a5e255c4
@ -1976,6 +1976,38 @@
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="logread">
|
||||
<title>logread</title>
|
||||
|
||||
<para>
|
||||
Usage: logread [OPTION]...
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Shows the messages from syslogd (using circular buffer).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Options:
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<screen>
|
||||
-f Output data as the log grows.
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Example:
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<screen>
|
||||
$ logread
|
||||
</screen>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="ls">
|
||||
<title>ls</title>
|
||||
|
||||
@ -3110,7 +3142,7 @@
|
||||
-O FILE Use an alternate log file (default=/var/log/messages)
|
||||
-R HOST[:PORT] Log remotely to IP or hostname on PORT (default PORT=514/UDP)
|
||||
-L Log locally as well as network logging (default is network only)
|
||||
-C Log to a circular buffer. Read this buffer using 'logread'
|
||||
-C [size(KiB)] Log to a circular buffer. Read this buffer using 'logread'
|
||||
</screen>
|
||||
</para>
|
||||
|
||||
|
@ -1458,10 +1458,12 @@
|
||||
"root\n"
|
||||
|
||||
#define logread_trivial_usage \
|
||||
""
|
||||
"[OPTION]..."
|
||||
|
||||
#define logread_full_usage \
|
||||
"Shows the messages from syslogd (using circular buffer)."
|
||||
"Shows the messages from syslogd (using circular buffer).\n\n"
|
||||
"Options:\n" \
|
||||
"\t-f\t\toutput data as the log grows"
|
||||
|
||||
#define losetup_trivial_usage \
|
||||
"[OPTION]... LOOPDEVICE FILE\n" \
|
||||
@ -2280,7 +2282,7 @@
|
||||
"\n\t-R HOST[:PORT]\tLog to IP or hostname on PORT (default PORT=514/UDP)\n" \
|
||||
"\t-L\t\tLog locally and via network logging (default is network only)") \
|
||||
USAGE_IPC_LOG( \
|
||||
"\n\t-C\t\tLog to a circular buffer (read the buffer using logread)")
|
||||
"\n\t-C [size(KiB)]\tLog to a circular buffer (read the buffer using logread)")
|
||||
#define syslogd_example_usage \
|
||||
"$ syslogd -R masterlog:514\n" \
|
||||
"$ syslogd -R 192.168.1.1:601\n"
|
||||
|
@ -56,6 +56,14 @@ config CONFIG_FEATURE_IPC_SYSLOG
|
||||
entire filesystem, which may cause your system to
|
||||
break badly.
|
||||
|
||||
config CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE
|
||||
int " Circular buffer size in Kbytes (minimum 4KB)"
|
||||
default 16
|
||||
depends on CONFIG_FEATURE_IPC_SYSLOG
|
||||
help
|
||||
This option sets the size of the circular buffer
|
||||
used to record system log messages.
|
||||
|
||||
config CONFIG_LOGREAD
|
||||
bool " logread"
|
||||
default y
|
||||
@ -66,6 +74,17 @@ config CONFIG_LOGREAD
|
||||
utility will allow you to read the messages that are
|
||||
stored in the syslogd circular buffer.
|
||||
|
||||
config CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
|
||||
bool " logread double buffering"
|
||||
default n
|
||||
depends on CONFIG_LOGREAD
|
||||
help
|
||||
'logread' ouput to slow serial terminals can have
|
||||
side effects on syslog because of the semaphore.
|
||||
This option make logread to double buffer copy
|
||||
from circular buffer, minimizing semaphore
|
||||
contention at some minor memory expense.
|
||||
|
||||
config CONFIG_KLOGD
|
||||
bool "klogd"
|
||||
default n
|
||||
|
@ -108,8 +108,7 @@ extern int logread_main(int argc, char **argv)
|
||||
i = follow ? buf->tail : buf->head;
|
||||
|
||||
do {
|
||||
#undef RC_LOGREAD
|
||||
#ifdef RC_LOGREAD
|
||||
#ifdef CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
|
||||
char *buf_data;
|
||||
int log_len,j;
|
||||
#endif
|
||||
@ -128,7 +127,7 @@ extern int logread_main(int argc, char **argv)
|
||||
}
|
||||
|
||||
// Read Memory
|
||||
#ifdef RC_LOGREAD
|
||||
#ifdef CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
|
||||
log_len = buf->tail - i;
|
||||
if (log_len < 0)
|
||||
log_len += buf->size;
|
||||
@ -155,7 +154,7 @@ extern int logread_main(int argc, char **argv)
|
||||
// release the lock on the log chain
|
||||
sem_up(log_semid);
|
||||
|
||||
#ifdef RC_LOGREAD
|
||||
#ifdef CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING
|
||||
for (j=0; j < log_len; j+=strlen(buf_data+j)+1) {
|
||||
printf("%s", buf_data+j);
|
||||
if (follow)
|
||||
|
@ -94,6 +94,12 @@ static int local_logging = FALSE;
|
||||
|
||||
/* circular buffer variables/structures */
|
||||
#ifdef CONFIG_FEATURE_IPC_SYSLOG
|
||||
|
||||
#if CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE < 4
|
||||
#error Sorry, you must set the syslogd buffer size to at least 4KB.
|
||||
#error Please check CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE
|
||||
#endif
|
||||
|
||||
#include <sys/ipc.h>
|
||||
#include <sys/sem.h>
|
||||
#include <sys/shm.h>
|
||||
@ -114,7 +120,7 @@ static struct sembuf SMwdn[3] = { {0, 0}, {1, 0}, {1, +1} }; // set SMwdn
|
||||
|
||||
static int shmid = -1; // ipc shared memory id
|
||||
static int s_semid = -1; // ipc semaphore id
|
||||
static int data_size = 16000; // default data size
|
||||
static int shm_size = ((CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE)*1024); // default shm size
|
||||
static int circular_logging = FALSE;
|
||||
|
||||
/*
|
||||
@ -156,7 +162,7 @@ void ipcsyslog_cleanup(void)
|
||||
void ipcsyslog_init(void)
|
||||
{
|
||||
if (buf == NULL) {
|
||||
if ((shmid = shmget(KEY_ID, data_size, IPC_CREAT | 1023)) == -1) {
|
||||
if ((shmid = shmget(KEY_ID, shm_size, IPC_CREAT | 1023)) == -1) {
|
||||
bb_perror_msg_and_die("shmget");
|
||||
}
|
||||
|
||||
@ -164,7 +170,7 @@ void ipcsyslog_init(void)
|
||||
bb_perror_msg_and_die("shmat");
|
||||
}
|
||||
|
||||
buf->size = data_size - sizeof(*buf);
|
||||
buf->size = shm_size - sizeof(*buf);
|
||||
buf->head = buf->tail = 0;
|
||||
|
||||
// we'll trust the OS to set initial semval to 0 (let's hope)
|
||||
@ -654,7 +660,7 @@ extern int syslogd_main(int argc, char **argv)
|
||||
if (optarg) {
|
||||
int buf_size = atoi(optarg);
|
||||
if (buf_size >= 4) {
|
||||
data_size = buf_size;
|
||||
shm_size = buf_size;
|
||||
}
|
||||
}
|
||||
circular_logging = TRUE;
|
||||
|
Loading…
Reference in New Issue
Block a user