syslog 安装
sudo apt-get install syslog
开放远程写入
修改配置文件:/etc/rsyslog.conf,放开对外提供服务的注释
# provides UDP syslog reception module(load="imudp") input(type="imudp" port="514") # provides TCP syslog reception module(load="imtcp") input(type="imtcp" port="514")
创建日志写入的配置文件
到目录 /etc/rsyslog.d 创建配置文件:mylog.conf,写入以下内容:
# mylog.conf # 定义日志内容的模板 $template t_msg, "%msg:2:$%\n" # 定义日志文件名称格式模板,programname: 文件名称 $template mylog_path, "/var/log/%programname%-%$year%-%$month%-%$day%.log" # 过滤写入日志的级别数据 local1.* -?mylog_path;t_msg
rsyslog 启动
启动: sudo service rsyslog start 重启: sudo service rsyslog restart
golang 使用方式
func main() { // 建立连接;syslog.LOG_LOCAL1: 对应日志的写入级别; Saturday: 定义日志文件的名称 sysLog, err := syslog.Dial("tcp", "127.0.0.1.158:514", syslog.LOG_LOCAL1, "Saturday") if err != nil { log.Fatal(err) } // 写入日志内容 sysLog.Emerg("Hello world!") }
屏蔽 rsyslog 控制台打印
编辑 /etc/rsyslog.conf 文件,在文件尾部找到下面这个配置,注释掉即可
#*.emerg :omusrmsg:*
数据太大被截断
默认大小是2k,大概可以保存1000个中文字符,参考官方说明 $MaxMessageSize, 最小也是2k。
注意:如果你的消息每行大小超过了4k,只能用TCP。
在加载imtcp/imudp之前设置, 此配置包括发送和接收,所以rsyslog客户端、服务端都要设置:
$MaxMessageSize 32k