如何使用logger命令记录自定义日志并隐藏执行用户名?
搞定
logger 自动加用户名的问题 我太懂这种无奈了——logger 默认硬要把执行命令的用户名塞进日志里,想自己填内容根本没辙,查手册找不到方法、试了JS也没搞定?别急,这儿有几个靠谱的解决方案:
1. 用 logger 自带标签参数直接替换用户名
其实logger藏了个好用的参数 -t(全称--tag),专门用来自定义日志的前缀标识,用它指定的内容会直接替代默认的用户名。比如你想把标识改成 my-app-admin,直接这么写:
logger -t "my-app-admin" "用户发起了数据导出请求"
生成的日志就会以你指定的标签开头,再也看不到默认的用户名了。
2. 绕开 logger,直接构造日志写入文件
如果logger的参数还是满足不了你的自定义需求,那干脆直接手动构造符合系统日志格式的内容,写入日志文件(比如常见的 /var/log/syslog,不同Linux发行版路径可能略有不同)。用date生成标准时间戳,再拼接你想要的所有内容:
echo "$(date +'%b %d %H:%M:%S') my-server my-custom-user: 数据库备份完成" >> /var/log/syslog
⚠️ 注意:这种方式需要你有日志文件的写入权限,必要时得加sudo。
3. 用管道过滤替换已生成的用户名(适合小改现有脚本)
如果已经有现成的脚本在调用logger,不想大动干戈的话,可以用sed把输出里的默认用户名替换成你要的内容。比如默认日志格式是 Mar 10 14:22:15 your-username: 日志内容,可以这么处理:
logger "用户登录失败" | sed "s/your-username/my-custom-account/g"
不过这个更适合事后处理日志内容,不如前两种从源头解决来得彻底。
对了,你提到用JavaScript尝试没成功——如果是在Node.js环境里操作的话,要么用child_process调用上面的bash命令,要么直接用winston这类专业日志库,它能直接生成自定义格式的日志并写入系统日志,完全避开logger的默认行为,比自己折腾JS调用命令靠谱多了。
内容的提问来源于stack exchange,提问作者Georgios Leventis
相关产品推荐
相关产品推荐

