这个错误信息 "logger: --file <文件> 和 <消息> 互斥,消息已忽略"
表明同时使用了 -f
(或 --file
) 选项指定了日志文件,并且在命令行中直接提供了要记录的消息 "hello zhangwangyancom"
。
logger
命令的语法通常是这样的:
logger [options] [message]
或者,当你使用 -f
选项将日志消息写入文件时,通常不直接在命令行提供消息,而是让 logger
从标准输入读取消息或配合其他选项使用。
原因分析:
当你使用 -f /mylog/0510.info.log
时,logger
期望将日志消息写入 /mylog/0510.info.log
文件。此时,如果你再在命令行的末尾加上 "hello zhangwangyancom"
,logger
会认为你同时提供了要写入的文件和一个独立的消息,这两者是互斥的,因此忽略了你直接提供的消息。
解决办法:
你有以下几种方法来解决这个问题:
-
将消息通过管道传递给
logger
:echo "hello zhangwangyancom" | logger -p info -f /mylog/0510.info.log
这条命令首先使用
echo
输出你的消息,然后通过管道 (|
) 将其作为logger
命令的标准输入,logger
会将标准输入的内容写入指定的文件。 -
直接使用
logger
记录消息,不使用-f
选项(将日志记录到系统日志):logger -p info "hello zhangwangyancom"
这条命令会将消息
"hello zhangwangyancom"
记录到系统的日志服务中(通常是 syslog 或 rsyslog),而不是特定的文件中。你可以根据你的系统配置在相应的日志文件中找到这条记录。 -
如果你确实想将特定消息写入文件,并且希望每次都覆盖文件(不推荐,除非你明确知道自己在做什么),你可以考虑使用重定向:
echo "hello zhangwangyancom" >> /mylog/0510.info.log
或者覆盖写入:
echo "hello zhangwangyancom" > /mylog/0510.info.log
注意: 这种方法不使用
logger
命令的日志管理功能(例如优先级),只是简单地将字符串写入文件。
总结:
遇到的错误是因为 -f
选项用于指定日志文件,而直接在命令行提供的消息被认为是与写入文件操作互斥的。你需要选择是将消息通过管道传递给 logger
并写入文件,还是直接使用 logger
记录消息到系统日志,或者使用重定向将消息写入文件。推荐使用第一种方法,因为它既使用了 logger
的功能,又能将消息写入你指定的文件。