systemd服务的输出重定向到指定文件
有一种更优雅的方法可以解决systemd输出到指定文件而非/var/log/message
,需要使用systemd参数与rsyslog过滤器。并指示syslog过滤器按程序名称拆分其输出。
systemd所需参数为
SyslogIdentifier
:required,设置日志标识符(发送日志消息时加在行首的字符串)("syslog tag")。 默认值是进程的名称。此选项仅在 StandardOutput= 或 StandardError= 的值包含 journal(+console), syslog(+console), kmsg(+console) 之一时才有意义, 并且仅适用于输出到标准输出或标准错误的日志消息。StandardOutput
:required,设置进程的标准输出(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目前工作模式,按照如下操作:
新建
/etc/rsyslog.d/xx.conf
文件。在新建文件内写入内容如下
单一条件处理。
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
}
检查语法是否正确
rsyslogd -N1 -f file_name.conf
重新启动rsyslog
完成以上步骤后,应用的 stdout
stderr
被重定向到对应的日志文件内了,而非/var/log/message
,并且仍然可以通过通过journalctl
获得对应的stdout
stderr
(systemd参数机制)。
reference
systemd
rsyslog-conditional
rsyslog
systemd服务的输出重定向到指定文件的更多相关文章
- 将Java和Javac的命令在控制台的输出重定向到txt文件
当我们在Windows控制台窗口执行程序时,输入如下命令: demo.exe > out.txt 就可以把demo程序的输出重定向到out.txt文件里面. 但是这种方法对于java和javac ...
- Log4j 配置某个类中某个方法的输出日志到指定文件
我们在项目中使用log4j开发的时候,会遇到一些特殊的情况,比如:要输出某个类中某个方法的日志信息到文件中,方便以后查看 可以使用如下配置: log4j.rootLogger=info,stdout ...
- 输出log到指定文件
0:pom.xml中添加依赖 <!--log4j--> <!--有错误时,可能版本不对,或者依赖没有加全 'org.apache.logging.log4j:log4j-core:2 ...
- shell :将标准输出及标准错误输出写到指定文件
shell 脚本如下: logFile=/usr/local/log/$today.txt exec >> $logFile 2>&1 1为标准输出stdout.2为标准错误 ...
- Linux实时将所有输出重定向到文件
Linux的重定向机制十分好用,我们经常需要在服务器上挂起一个服务程序,然后将该程序的所有输出重定向到某个文件,这样即使我们注销了用户,程序依然在linux服务器上运行着. 但是重定向的输出经常无法实 ...
- 转:Linux实时将所有输出重定向到文件
转自: Linux的重定向机制十分好用,我们经常需要在服务器上挂起一个服务程序,然后将该程序的所有输出重定向到某个文件,这样即使我们注销了用户,程序依然在linux服务器上运行着. 但是重定向的输出经 ...
- Java 输入/输出——重定向标准输入/输出
在System类中提供了如下三个重定向标准输入/输出方法. static void setErr(PrintStream err) Reassigns the "standard" ...
- java输出重定向
Java的标准输入,输出分别是通过System.in和System.out来代表.默认情况下他们分别代表键盘和显示器. System类里提供了3个重定向标准输入,输出的方法. static void ...
- 010-Shell 输入/输出重定向
大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默 ...
随机推荐
- FFmpeg API的简单实践应用
0. 前言 利用 FFmpeg 编译链接生成的可执行程序本身可以实现很多特定的功能,但如果我们有自己的个性化需求,想要在自己开发的项目中使用 ffmpeg 的一些功能,就需要理解并应用其已经实现好的A ...
- Java中的面向切面编程(AOP)
一.什么是AOP? Aspect Oriented Programming ,即面向切面编程. AOP是对面向对象编程的一个补充. 它的目的是将复杂的需求分解为不同的切面,将散布在系统中的公共功能集中 ...
- java面试-集合类不安全问题及解决方案
一.List 1.代码演示 public class ArrayListNotSafeDemo { public static void main(String[] args) { List<S ...
- 北航OO第三单元作业总结(3.1~3.3)
JML简介及相关工具链使用 1.JML规格描述语言介绍 本单元学习的内容是JML规格描述语言.我们知道,面向对象方法是一个抽象过程,需求者仅需关注方法的规格.规格是对一个方法/类/程序的外部可感知行为 ...
- Kafka分片存储、消息分发和持久化机制
Kafka 分片存储机制 Broker:消息中间件处理结点,一个 Kafka 节点就是一个 broker,多个 broker 可以组成一个 Kafka集群. Topic:一类消息,例如 page vi ...
- Java(100-113)【类与对象、封装、构造方法】
1.对象的创建以及使用 Student stu =new Student(); 根据一个类创建一个对象 导包.创建.使用 2.手机练习 有main才能run Phone.java package cn ...
- Redis深入理解
Redis Redis的三种集群方式 主从复制 原理 从服务器连接主服务器,发送sync(同步)命令 主服务器接收到sync命令后,开始执行bgsave命令生成RDB文件并使用缓存区记录此后执行的所有 ...
- TCP:与UDP区别、三次握手、四次挥手、Socket 编程
1. TCP 基本认识 TCP 头部格式 为什么需要 TCP 协议?TCP 工作在哪一层? 什么是 TCP ? 什么是 TCP 连接? 如何唯一确定一个 TCP 连接呢? 有一个 IP 的服务器监听了 ...
- 1149 Dangerous Goods Packaging
When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...
- 1002 A+B for Polynomials (25分)
This time, you are supposed to find A+B where A and B are two polynomials. Input Specification: Each ...