Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 将日志从文件转发到日志_Unix_Logging_Centos_Systemd - Fatal编程技术网

Unix 将日志从文件转发到日志

Unix 将日志从文件转发到日志,unix,logging,centos,systemd,Unix,Logging,Centos,Systemd,我在隔离机器上有一个应用程序。例如,它将日志写入/var/log/app/log.txt。但是,我希望它将日志写入日志守护进程。但是,我无法更改应用程序的运行方式,因为它是封装的 我的意思是我不能做smth,比如app | systemd cat 1)所有服务都是以systemd向journald写入日志开始的,我说得对吗 2)如果是这样,由systemd启动的进程的子进程是否也会将日志写入journald 3)有没有办法告诉journald从特定文件中获取日志 4)如果没有,是否有任何解决方法

我在隔离机器上有一个应用程序。例如,它将日志写入/var/log/app/log.txt。但是,我希望它将日志写入日志守护进程。但是,我无法更改应用程序的运行方式,因为它是封装的

我的意思是我不能做smth,比如
app | systemd cat

1)所有服务都是以systemd向journald写入日志开始的,我说得对吗

2)如果是这样,由systemd启动的进程的子进程是否也会将日志写入journald

3)有没有办法告诉journald从特定文件中获取日志


4)如果没有,是否有任何解决方法?

警告:这未经测试

您可以将bind
/dev/stdout
装载到
ExecStartPre

例如:

ExecStartPre=/use/sbin/mount --bind /dev/stdout  /var/log/app/log.txt
ExecStartPre=/use/bin/ln -s /dev/stdout  /var/log/app/log.txt
或软链接
/dev/stdout
以登录
ExecStartPre

例如:

ExecStartPre=/use/sbin/mount --bind /dev/stdout  /var/log/app/log.txt
ExecStartPre=/use/bin/ln -s /dev/stdout  /var/log/app/log.txt
4) 我只能尝试帮助解决以下问题:

MY_LOG_FILE=/var/log/app/log.txt

# Create a FIFO PIPE
PIPE=/tmp/my_fifo_pipe
mkfifo $PIPE
MY_IDENTIFIER="my_app_name"     # just a label for later searching in journalctl 

# Start logging to journal
systemd-cat -t $MY_IDENTIFIER -p info < $PIPE &
exec 3>$PIPE

tail -f $MY_LOG_FILE > $PIPE &

exec 3>&- #closing file descriptor 3 closes the fifo
MY_LOG_FILE=/var/LOG/app/LOG.txt
#创建FIFO管道
管道=/tmp/my_fifo_管道
mkfifo$管道
MY_IDENTIFIER=“MY_app_name”#只是一个标签,供以后在journalctl中搜索
#开始日志记录到日志
systemd cat-t$MY_标识符-p信息<$PIPE&
exec 3>$PIPE
tail-f$MY\u LOG\u FILE>$PIPE&
exec 3>关闭文件描述符3关闭fifo

这是最基本的想法,您现在应该考虑时间安排、何时需要启动以及何时停止。

好的,我已经找到了前两个问题的答案1)是2)是