Golang 配合 rsyslog 写入远程日志

Jackey Golang 689 次浏览 , 没有评论

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

 

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Go