linux log
一:printk
数字越小级别越高
- 打印方式:
printk(KERN_EMERG " KERN_EMERG\n");
printk(KERN_ALERT " KERN_ALERT\n");
printk(KERN_CRIT " KERN_CRIT\n");
printk(KERN_ERR " KERN_ERR\n");
printk(KERN_WARNING " KERN_WARNING\n");
printk(KERN_NOTICE " KERN_NOTICE\n");
printk(KERN_INFO " KERN_INFO\n");
printk(KERN_DEBUG " KERN_DEBUG\n");
printk(" no_fix\n");
-
printk打印消息控制
console_loglevel:只有当printk打印消息的log优先级高于console_loglevel时,才能输出到终端上
default_message_loglevel:printk打印消息时默认的log等级
minimum_console_loglevel:console_loglevel可以被设置的最小值
default_console_loglevel:console_loglevel的缺省值 -
printk消息等级查看与修改
-
查看
cat /proc/sys/kernel/printk # 7 4 1 7
-
修改
echo 8 4 1 7 > /proc/sys/kernel/printk
二:rsyslog
配置文件
配置dmesg信息保存路径
属性筛选
三:systemd-journald系统
配置文件
# /etc/systemd/journald.conf
[Journal]
Storage=auto
Compress=yes # 默认值"yes"表示
# 压缩存储大于特定阈值(默认为512字节)的对象
# 也可以直接设置一个 字节值(可以带有 K, M, G 后缀) 表示的阈值,
# 表示压缩存储 大于指定阈值的对象。
#Seal=yes # 默认值"yes".
# 如果存在一个"sealing key",由 journalctl(1) 的 --setup-keys 命令创建
# 那么就为所有持久保存的日志文件启用 FSS(Seekable Sequential Key Generators)保护
# 以避免日志文件 被恶意或无意的修改
#SplitMode=uid #设置是否按照每个用户分割日志文件,以实现对日志的访问控制
#SyncIntervalSec=5m
#RateLimitIntervalSec=30s #限制日志的生成速率
#RateLimitBurst=10000
#SystemMaxUse=256M
#SystemKeepFree=
#SystemMaxFileSize=50M
#SystemMaxFiles=100
#RuntimeMaxUse=128M
#RuntimeKeepFree=
#RuntimeMaxFileSize=50M
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg
#LineMax=48K
#ReadKMsg=yes
#Audit=yes
Journald支持的不同类型的存储
Storage
- volatile,则日志数据将仅存储在内存中,即在/run/log/journal目录下(根据需要创建)
- persistent,则数据将会存储在磁盘上,即/var/log/journal目录下,并且在早期引导阶段磁盘不可写的时候把数据保存到/run/log/journal目录下
- auto值意味着把日志数据存储在/var/log/journal/目录中。但是该目录必须已经存在并且设置了适当的权限。如果不存在,则日记数据将存储在易失性/run/log/journal/目录中,并且在系统关闭时会删除该数据
- none关闭所有存储,所有接收到的日志数据将被丢弃
对日志文件执行logrotate
- 对日志文件执行logroate
#SystemMaxUse=256M #控制日志最大可使用多少磁盘空间,然后对日志文件执行systemd-journald logrotate。默认为分配给节点的总物理内存的10%
#SystemKeepFree= #控制systemd-journald将为其他用途保留多少磁盘空间,之后将对日志文件执行systemd-journald logrotate。默认为分配给节点
#的总物理内存的15%
#SystemMaxFileSize=50M #限制单个日志文件的最大体积,到达此限制后日志文件将会自动滚动,默认值是对应的 SystemMaxUse=/RuntimeMaxUse= 值
#的1/8,这也意味着日志滚动 默认保留7个历史文件
#SystemMaxFiles=100
#RuntimeMaxUse=128M #控制日志最大可使用多少磁盘空间,然后对日志文件执行systemd-journald logrotate。默认为分配给节点的总物理内存的10%
#RuntimeKeepFree= #控制systemd-journald将为其他用途保留多少磁盘空间,之后将对日志文件执行systemd-journald logrotate。默认为分配给节
#点的总物理内存的15%
#RuntimeMaxFileSize=50M #限制单个日志文件的最大体积,到达此限制后日志文件将会自动滚动,默认值是对应的 SystemMaxUse=/RuntimeMaxUse= 值
#的1/8,这也意味着日志滚动 默认保留7个历史文件
#RuntimeMaxFiles=100 #限制最多允许同时存在多少个日志文件, 超出此限制后, 最老的日志文件将被删除, 而当前的活动日志文件 则不受影响。 默认值
#为100个
#MaxRetentionSec= #日志滚动的时间间隔
#MaxFileSec=1month #日志文件的最大保留期限
System开头的选项用于限制磁盘使用量, 也就是 /var/log/journal 的使用量
Runtime开头的选项用于限制内存使用量, 也就是 /run/log/journal 的使用量
自定义用户日志
syslog方法
- openlog
/**
* @brief
*
* @param __ident 用来表示信息的来源,ident信息会被固定地添加在每行日志的前面
* @param __option 控制标志
* #define LOG_PID 0x01 /* log the pid with each message */
* #define LOG_CONS 0x02 /* log on the console if errors in sending */
* #define LOG_ODELAY 0x04 /* delay open until first syslog() (default) */
* #define LOG_NDELAY 0x08 /* don't delay open */
* #define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */
* #define LOG_PERROR 0x20 /* log to stderr as well */
* @param __facility
* #define LOG_KERN (0<<3) /* kernel messages */
* #define LOG_USER (1<<3) /* random user-level messages */
* #define LOG_MAIL (2<<3) /* mail system */
* #define LOG_DAEMON (3<<3) /* system daemons */
* #define LOG_AUTH (4<<3) /* security/authorization messages */
* #define LOG_SYSLOG (5<<3) /* messages generated internally by syslogd */
* #define LOG_LPR (6<<3) /* line printer subsystem */
* #define LOG_NEWS (7<<3) /* network news subsystem */
* #define LOG_UUCP (8<<3) /* UUCP subsystem */
* #define LOG_CRON (9<<3) /* clock daemon */
* #define LOG_AUTHPRIV (10<<3) /* security/authorization messages (private) */
* #define LOG_FTP (11<<3) /* ftp daemon */
* #define LOG_LOCAL0 (16<<3) /* reserved for local use */
* #define LOG_LOCAL1 (17<<3) /* reserved for local use */
* #define LOG_LOCAL2 (18<<3) /* reserved for local use */
* #define LOG_LOCAL3 (19<<3) /* reserved for local use */
* #define LOG_LOCAL4 (20<<3) /* reserved for local use */
* #define LOG_LOCAL5 (21<<3) /* reserved for local use */
* #define LOG_LOCAL6 (22<<3) /* reserved for local use */
* #define LOG_LOCAL7 (23<<3) /* reserved for local use */
*/
extern void openlog (const char *__ident, int __option, int __facility);
- syslog
/**
* @brief Generate a log message using FMT string and option arguments.
* This function is a possible cancellation point and therefore not
* marked with __THROW.
* @__pri
* #define LOG_EMERG 0 /* system is unusable */
* #define LOG_ALERT 1 /* action must be taken immediately */
* #define LOG_CRIT 2 /* critical conditions */
* #define LOG_ERR 3 /* error conditions */
* #define LOG_WARNING 4 /* warning conditions */
* #define LOG_NOTICE 5 /* normal but significant condition */
* #define LOG_INFO 6 /* informational */
* #define LOG_DEBUG 7 /* debug-level messages */
*/
extern void syslog (int __pri, const char *__fmt, ...)__attribute__ ((__format__ (__printf__, 2, 3)));
- closelog
远程发送和接收日志
-
服务端配置
-
客户端配置
一个@标识udp,两个@@标识tcp