有一种更优雅的方法可以解决systemd输出到指定文件而非/var/log/message,需要使用systemd参数与rsyslog过滤器。并指示syslog过滤器按程序名称拆分其输出。

systemd所需参数为

  • SyslogIdentifierrequired,设置日志标识符(发送日志消息时加在行首的字符串)("syslog tag")。 默认值是进程的名称。此选项仅在 StandardOutput= 或 StandardError= 的值包含 journal(+console), syslog(+console), kmsg(+console) 之一时才有意义, 并且仅适用于输出到标准输出或标准错误的日志消息。
  • StandardOutputrequired,设置进程的标准输出(STDOUT)。 可设为 inherit, null, tty, journal, syslog, kmsg, journal+console, syslog+console, kmsg+console, file:path, append:path, socket, fd:name 之一。
  • StandardError:设置进程的标准错误(STDERR)。 取值范围及含义与 StandardOutput= 相同。但有如下例外: (1) inherit 表示使用 StandardOutput= 的值。 (2) fd:name 的默认文件描述符名称为 "stderr"

rsyslog过滤器设置

  使用rsyslog条件选择器。如果不改变rsyslog目前工作模式,按照如下操作:

  1. 新建/etc/rsyslog.d/xx.conf文件

  2. 在新建文件内写入内容如下

单一条件处理。

if $programname == 'programname' then /var/log/programname.log
# 停止往其他文件内写入,如果不加此句,会继续往/var/log/message写入。
if $programname == 'programname' then stop

多条件处理

  会根据不同应用名称将不同的输出日志重定向到不同的文件内。

if ($programname == 'apiserver') then {
action(type="omfile" file="/var/log/apiserver.log")
stop
} else if ($programname == 'scheduler') then {
action(type="omfile" file="/var/log/scheduler.log")
stop
} else if ($programname == 'controller-manager') then {
action(type="omfile" file="/var/log/controller-manager.log")
stop
} else if ($programname == 'etcd') then {
action(type="omfile" file="/var/log/etcd.log")
stop
}
  1. 检查语法是否正确 rsyslogd -N1 -f file_name.conf

  2. 重新启动rsyslog

  完成以上步骤后,应用的 stdout stderr被重定向到对应的日志文件内了,而非/var/log/message,并且仍然可以通过通过journalctl获得对应的stdout stderr (systemd参数机制)。

reference

systemd

rsyslog-conditional

rsyslog

systemd服务的输出重定向到指定文件的更多相关文章

  1. 将Java和Javac的命令在控制台的输出重定向到txt文件

    当我们在Windows控制台窗口执行程序时,输入如下命令: demo.exe > out.txt 就可以把demo程序的输出重定向到out.txt文件里面. 但是这种方法对于java和javac ...

  2. Log4j 配置某个类中某个方法的输出日志到指定文件

    我们在项目中使用log4j开发的时候,会遇到一些特殊的情况,比如:要输出某个类中某个方法的日志信息到文件中,方便以后查看 可以使用如下配置: log4j.rootLogger=info,stdout ...

  3. 输出log到指定文件

    0:pom.xml中添加依赖 <!--log4j--> <!--有错误时,可能版本不对,或者依赖没有加全 'org.apache.logging.log4j:log4j-core:2 ...

  4. shell :将标准输出及标准错误输出写到指定文件

    shell 脚本如下: logFile=/usr/local/log/$today.txt exec >> $logFile 2>&1 1为标准输出stdout.2为标准错误 ...

  5. Linux实时将所有输出重定向到文件

    Linux的重定向机制十分好用,我们经常需要在服务器上挂起一个服务程序,然后将该程序的所有输出重定向到某个文件,这样即使我们注销了用户,程序依然在linux服务器上运行着. 但是重定向的输出经常无法实 ...

  6. 转:Linux实时将所有输出重定向到文件

    转自: Linux的重定向机制十分好用,我们经常需要在服务器上挂起一个服务程序,然后将该程序的所有输出重定向到某个文件,这样即使我们注销了用户,程序依然在linux服务器上运行着. 但是重定向的输出经 ...

  7. Java 输入/输出——重定向标准输入/输出

    在System类中提供了如下三个重定向标准输入/输出方法. static void setErr​(PrintStream err) Reassigns the "standard" ...

  8. java输出重定向

    Java的标准输入,输出分别是通过System.in和System.out来代表.默认情况下他们分别代表键盘和显示器. System类里提供了3个重定向标准输入,输出的方法. static void ...

  9. 010-Shell 输入/输出重定向

    大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回​​到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...

随机推荐

  1. IdentityServer4是什么

    1 什么是IdentityServer4? IdentityServer4是用于ASP.NET Core的OpenID Connect和OAuth 2.0框架. 2 什么是OAuth 2.0? OAu ...

  2. Git基础知识之内部状态管理系统

    本文主要来介绍一下 Git 的内部状态管理系统.它利用基于节点和指针的数据结构来跟踪及管理编辑操作的时间线. 对本地项目而言,任一时刻,Git 处于三种状态中的一种:工作区状态.暂存区状态和提交区状态 ...

  3. 抗DDOS应急预案实践-生产环境总结-建议必看

    一.首先摸清楚环境与资源 为DDoS应急预案提供支撑 所在的网络环境中,有多少条互联网出口?每一条带宽多少? 每一条互联网出口的运营商是否支持DDoS攻击清洗,我们是否购买,或可以紧急试用?当发生DD ...

  4. Spring IOC 特性有哪些,不会读不懂源码!

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 多线程.锁.JVM调优,都背出花啦,怎么一写代码还是乱糟糟? 为什么这些无论从书本. ...

  5. 2021 小白版,360 行行行转 IT

    hey guys ,我是 cxuan,这一篇文章我就要和你聊聊编程如何学习,这一篇文章涉及的内容简直太多了,我将从入门开始,一步一步到如何提高,然后到一些学习的相关问题,还有一些计算机相关的术语等,干 ...

  6. python基础(二):数据类型

    数据类型 学习Python时,一定要注意Python中数据类型和数据结构的学习,这对于你是否能够学好Python其中很重要的作用. 什么是数据类型? 人类有思想,很容易区分汉字和数字的区别,例如,你知 ...

  7. Ambassador-08-跨域

    官方文档:https://www.getambassador.io/docs/latest/topics/using/cors/ Cross-Origin Resource Sharing-CORS ...

  8. 浅谈synchronized和volatitle实现线程安全的策略

    什么是线程不安全 我对线程安全的理解就是多个线程同时操作一个共享变量时会产生意料之外的情况,这种情况就是线程不安全.注意:只有写操作才可能出现线程不安全,对共享变量只进行读操作线程是绝对安全的. 具体 ...

  9. k8s 运行单实例 mysql

    配置文件mysql.yaml --- apiVersion: v1 kind: Service metadata: name: mysql-01 spec: ports: - port: 3306 s ...

  10. aws eks ebs StorageClass PersistentVolume PersistentVolumeClaim

    aws EBS 提供存储资源 Amazon EBS CSI 驱动程序的安装,请参考https://docs.aws.amazon.com/zh_cn/eks/latest/userguide/ebs- ...