如何自动刷新syslog拥有的日志文件的数据?

如何自动刷新syslog拥有的日志文件的数据?

我将 Go 二进制文件作为服务运行,并创建了 syslog 拥有的日志文件来维护所有日志。

这是我的服务文件::

[Unit]
Description=myapp

[Service]
Type=simple
Restart=always
RestartSec=30
WorkingDirectory= /home/go/src/myapp
ExecStart=/home/go/src/myapp/myapp  

# myapp.log owned by syslog
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /var/log/myapp
ExecStartPre=/bin/chown syslog:adm /var/log/myapp
ExecStartPre=/bin/chmod 755 /var/log/myapp
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp                           

[Install]
WantedBy=multi-user.target

之后使用 rsyslog 管理系统日志,在 /etc/rsyslog.d/myapp.conf 中创建一个包含以下内容的文件:

if $programname == 'myapp' then /var/log/myapp/myapp.log
& stop

之后我重新启动了服务。它为我创建了一个日志文件。我有两个关于日志文件的问题,如下:

  1. 现在我必须每 15 天后刷新所有日志文件数据。有什么方法可以做到这一点吗?
  2. 有一些api每3分钟就会有响应,那么有没有办法限制某些api生成日志?

我正在使用 systemd 完成这一切。请建议我是否有方法可以创建附加到 systemd 服务的此类日志文件。

答案1

  1. 要刷新该日志,您可以使用标准 logrotate,并在 postrotate 脚本中重新加载 rsyslog。手册页
  2. 如你看到的。 Systemd 会将所有标准输出写入 syslog,因此过滤哪些 api 应该或不应该进入 stdout 必须在应用程序内部完成。

相关内容