1、syslog源码所在位置
syslog在busybox的工具包内
busybox是在buildroot的dl目录下(./buildroot/dl/busybox),这个目录会根据网址从网上下载压缩包
在./buildroot/dl/busybox/busybox-1.31.0/sysklogd$ l目录下有syslogd源码
syslogd.c
static const struct init_globals init_data = {
.logFile = {
.path = "/var/log/messages", //源码定义了一个默认的log文件夹
.fd = -1,
},
#ifdef SYSLOGD_MARK
.markInterval = 20 * 60,
#endif
.logLevel = 8,
#if ENABLE_FEATURE_ROTATE_LOGFILE
.logFileSize = 200 * 1024, //源码定义log文件大小为200k
.logFileRotate = 1, //源码定义缓冲文件为1个,每次log文件写满200k之后,就会移到缓冲文件
#endif
这些源码初始化了log文件的大小和缓存的副本个数
2、syslog的配置文件syslog.conf 和syslog-startup.conf
这些文件在buildroot下的package目录:./buildroot/package/busybox
此目录下可看到以下三个文件,没有的话可以创建
S01syslogd(syslog运行脚本,系统启动时运行)
syslog.conf(syslog配置文件,可参考https://blog.csdn.net/sssddd12345_/article/details/107856253)
syslog-startup.conf(定义syslog默认配置文件,如默认目录/var/log/messages)
1、首先看syslog.conf
(可参考https://blog.csdn.net/sssddd12345_/article/details/107856253)
# /etc/syslog.conf - Configuration file for busybox's syslogd utility
kern.*;user.* /var/log/kernel.log
2、其次看syslog-starup.conf
#This configuration file is used by the busybox syslog init script,
# /etc/init.d/syslog[.busybox] to set syslog configuration at start time.
DESTINATION="file" # log destinations (buffer file remote)
LOGFILE=/var/log/messages # where to log (file)
REMOTE=loghost:514 # where to log (syslog remote)
REDUCE=no # reduce-size logging
DROPDUPLICATES=no # whether to drop duplicate log entries
ROTATESIZE=2048 # rotate log if grown beyond X [kByte]
ROTATEGENS=2 # keep X generations of rotated logs
BUFFERSIZE=64 # size of circular buffer [kByte]
FOREGROUND=no # run in foreground (don't use!)
#LOGLEVEL=5 # local log level (between 1 and 8)
3、然后看S01syslogd
S01syslogd是脚本文件,系统启动时运行,
解析过程:通过分析syslog-startup.conf,取出其中的参数进行配置
set -e
#判断是否存在/etc/syslog-startup.conf,否则使用源码配置
if [ -f /etc/syslog-startup.conf ]; then
#运行配置文件
. /etc/syslog-startup.conf
LOG_LOCAL=0
LOG_REMOTE=0
#循环所有的变量
for D in $DESTINATION; do
if [ "$D" = "file" ]; then
#如果存在LOGFILE,则使用此参数
if [ -n "$LOGFILE" ]; then
SYSLOG_ARGS="$SYSLOG_ARGS -O $LOGFILE"
Fi
#如果存在ROTATESIZE,则添加此参数
if [ -n "$ROTATESIZE" ]; then
SYSLOG_ARGS="$SYSLOG_ARGS -s $ROTATESIZE"
Fi
#如果存在ROTATEGENS,则添加此参数
if [ -n "$ROTATEGENS" ]; then
SYSLOG_ARGS="$SYSLOG_ARGS -b $ROTATEGENS"
fi
LOG_LOCAL=1
elif [ "$D" = "remote" ]; then
SYSLOG_ARGS="$SYSLOG_ARGS -R $REMOTE"
LOG_REMOTE=1
fi
done
if [ "$LOG_LOCAL" = "1" -a "$LOG_REMOTE" = "1" ]; then
SYSLOG_ARGS="$SYSLOG_ARGS -L"
fi
if [ "$REDUCE" = "yes" ]; then
SYSLOG_ARGS="$SYSLOG_ARGS -S"
fi
if [ "$DROPDUPLICATES" = "yes" ]; then
SYSLOG_ARGS="$SYSLOG_ARGS -D"
Fi
#如果存在ROTATEGENS,则添加此参数
if [ -n "$LOGLEVEL" ]; then
SYSLOG_ARGS="$SYSLOG_ARGS -l $LOGLEVEL"
fi
else
# default: log to 16K shm circular buffer
SYSLOG_ARGS="-C"
fi
4、最后有makefile脚本(busybox.mk)进行编译
if grep -q CONFIG_SYSLOGD=y $(@D)/.config; \
then \
#复制syslog.conf
$(INSTALL) -m 0755 -D package/busybox/syslog.conf \
$(TARGET_DIR)/etc/syslog.conf; \
#复制syslog-startup.conf
$(INSTALL) -m 0755 -D package/busybox/syslog-startup.conf \
$(TARGET_DIR)/etc/syslog-startup.conf; \
#复制S01syslogd
$(INSTALL) -m 0755 -D package/busybox/S01syslogd \
$(TARGET_DIR)/etc/init.d/S01syslogd; \
fi; \
5、启动板卡,运行程序
(可参考https://blog.csdn.net/sssddd12345_/article/details/107856253)
# ls /etc/syslog.conf /etc/syslog-startup.conf
/etc/syslog-startup.conf /etc/syslog.conf
# ls /etc/init.d/S01syslogd
/etc/init.d/S01syslogd
ls /var/log/ -l
total 111
-rw-r--r-- 1 root root 109348 Jan 8 08:58 kernel.log
-rw-r--r-- 1 root root 3887 Jan 8 08:52 messages