如何调整nohup命令的日志输出级别,高效实现日志精细化管理?
- 内容介绍
- 文章标签
- 相关推荐
如何调整nohup命令的日志输出级别,日志细致管理?
在程序运维过程中,日志是少不了的一部分。通过日志,可以追踪程序的运行状态,定位问题,调整性能。而nohup命令则是在后台运行程序的利器,方便我们看日志。只是许多开发者和运维人员常常遇到以下痛点:
- 日志过于冗长默认情况下nohup会将所有输出记录到nohup.out中,导致文件体积庞大、难以快速定位关键信息。
- 无法灵活控制缺乏对不同级别日志的细致管理能力。
- 资源浪费过度记录低级别日志可能影响程序性能和存储空间。
- 多任务管理困难同时运行多个nohup进程时混乱的输出使得排查问题变得复杂。
import logging
logging.basicConfig # 设置日志级别为DEBUG,这将记录所有级别的日志
1. 修改配置文件
"客观地说..."
许多程序允许通过修改配置文件来设置日志级别。例如对于Python程序,可以通过修改logging模块的配置来设置日志级别:
import logging
logging.basicConfig(
level=logging.INFO,# 只记录INFO及以上级别
format='%s %s:%s'。handlers=
)
app.logger.setLevel # Flask示例
2. 使用命令行参数
"雪糕刺客"——这个名字让我想起了那些隐藏在默认配置中的"冷冻危险"
一些程序支持通过命令行参数来设置日志级别。例如对于gunicorn程序:
export GLOG_v=2
nohup gunicorn my_app:app --log-level info &
# 或直接:
GLOG_v=2 nohup gunicorn my_app:app --log-file - --access-logfile - &
# 注意:--log-level可选值包括debug/info/warning/error
# --access-logfile控制访问日志输出
3. 使用环境变量控制
"记住..."——记住这个方法可以让你在不同环境中快速切换!
某些应用会检查特定环境变量来调整行为:
# Bash示例
export LOG_LEVEL="WARNING"
export NOHUP_OUT="custom.log"
nohup python app.py>> "$NOHUP_OUT" 2>&1 &
# Python代码中读取:
log_level = os.getenv
numeric_level = getattr,None)
if not isinstance:
raise ValueError
logger.setLevel
⚠️ 危险警告!⚠️ 默认情况下...
"推倒重来"可能成为你唯一选择!如果不及时调整... 1. 日志文件会迅速膨胀至几十GB 2. grep/sed等工具查找效率直线下降 3. I/O压力导致服务器响应延迟 4. 错误信息被淹没在海量普通信息中 5. 调试时间从分钟延长至小时甚至天数... - 没有调整过的人都这样说 -
4. tee命令与实时监控结合使用★★★★☆
"我悟了!原来还有这种操作..."——结合现代监控工具真香!不仅保留传统功能还能获得更强大能力:
tail -f nohup.out | grep -E 'ERROR|WARNING'
tail -F nohup.out | \ awk '{print strftime,$0}' | \ tee>> | nc localhost 8888 & # 发送到监控服务
multitail nohup.out -s r 'ERROR\|WARNING' dstat --no-disk --no-net | while read line;do echo "$line";done>> stats.log & watch "tail -5 /var/log/nohup/*" lsof +D /path/to/logs # 检查打开的文件描述符
systemctl start myservice.service # 自动重启+标准错误分离+限制资源使用情况 journalctl SYSTEMDUNIT=myservice.service --since today -f journalctl SYSTEMDUNIT=myservice.service -o json-pretty | jq .MESSAGE | less
echo "/var/log/nohup/*.out { daily missingok rotate 7 compress delaycompress notifempty createolddirs sharedscripts postrotate killall -HUP syslogd endscript}" | sudo tee /etc/logrotate.d/nohuplog
systemctl restart rsyslog # 生效配置更改
find /var/log/nohup/ -type f!-mtime +7,-name ".gz"!-name ".old"!老实说,-size +1M!\ \ echo "alias ll='lsblk'">> ~/.bashrc # 快速查看硬盘空间情况
curl ifconfig.me # 检查网络连接是否正常以确保远程收集可靠性
sudo iptables-save> ~/iptables.bak # 防止防火墙阻断监控端口导致失联风险增大... cp ~/.ssh/authorized_keys ~/backup/ sudo dpkg-reconfigure tzdata # 时区校准确保时间戳准确度达到微秒级!
history | awk '{print $NF}' | sort | uniq | xargs apt-cache policy # 检查已安装组件版本是否匹配当前需求
docker logs containername --since=60s --tail=50 &> dockerlogs.txt && notify-send "Docker Logs Updated"
ps auxw | awk '$1=="youruser"{print $NF}' # 快速定位所有属于指定使用者的进程方法避免误操作!df –i && du –sh . && ip addr show && netstat –ano && lsof –iTCP –P –n && vmstat –t && mpstat –P ALL && uptime && wget https://raw.githubusercontent.com/.../check.sh?$|bash –
strace tail –f $&>trace.log & pid=$!话说回来,sleep 1 kill $pid &>kill.log& sleep .5 killall strace&>killstrace.log& rm trace.* kill.*
chmod u+x ./healthcheck.sh;crontab echo $+MIN)) ];n head–echo $+MIN))$f>$tmp&&mv$tmp$f&&echo “Rotated”$ffile>rotatelog else echo “Skipped”$ffile>rotate_log fi done;话说回来,
cat *.out|awk '{sub;sub} NR%7==1{printf "\xEF\xBF\xBD\xEF\xBF\xBD"} {print}'|less--quit-if-one-screen--RAW-CONTROL-CHARS--LONG-LINES;
perl–e 'while { $_ =~ s/\x{FFFD}/\U$&/g;print }'
curl–X POST https://api.openwearmap.org/data/2.5/wear?lat={lat}&lon={lon}&appid={key}&units=metric|curl–request POST https://slack.com/api/chat.postMessage—header Content-Type:application/json—header Authorization:Bearer xoxb-xxxx—data-urlencode ‘payload={"channel":"alert"。"text":"Wear alert at ’$’:\’\’","attachments":}’
screen-RSessionsMonitoring$$;
tmux new-session-d ‘while true;说起来,do cat *.out|tail-n +99999999>/dev/null||sleep${interval:-60};done’
三、 日志调整技巧 ★★★★☆
- 选择合适的日誌級別: DEBUG))))→選擇權衡點為資源消耗與診斷深度之間平衡關係式計算結果應≤系數乘積閾值範圍內!
import signal def handler: logger.info if signum == SIGUSR1:
newlevel=getattr elif signum == SIGUSR2:
newlevel=getattr logger.setLevel
signal.signal signal.signal: $kill-USR1 PIDTOINCREASEVERBOSITY;/usr/bin/kill-USR2 PIDTOREDUCEVERBOSITY;/usr/bin/kill-HUP PIDTORELOAD_CONFIG;&&/usr/local/bin/reload-service.sh&
再看※註解,表示需要聯動其他監測系統數據來源做交叉驗證決策判斷依據;=需通知運維團隊緊急處理事項;说起来,當即觸發災難恢復流水線
如何调整nohup命令的日志输出级别,日志细致管理?
在程序运维过程中,日志是少不了的一部分。通过日志,可以追踪程序的运行状态,定位问题,调整性能。而nohup命令则是在后台运行程序的利器,方便我们看日志。只是许多开发者和运维人员常常遇到以下痛点:
- 日志过于冗长默认情况下nohup会将所有输出记录到nohup.out中,导致文件体积庞大、难以快速定位关键信息。
- 无法灵活控制缺乏对不同级别日志的细致管理能力。
- 资源浪费过度记录低级别日志可能影响程序性能和存储空间。
- 多任务管理困难同时运行多个nohup进程时混乱的输出使得排查问题变得复杂。
import logging
logging.basicConfig # 设置日志级别为DEBUG,这将记录所有级别的日志
1. 修改配置文件
"客观地说..."
许多程序允许通过修改配置文件来设置日志级别。例如对于Python程序,可以通过修改logging模块的配置来设置日志级别:
import logging
logging.basicConfig(
level=logging.INFO,# 只记录INFO及以上级别
format='%s %s:%s'。handlers=
)
app.logger.setLevel # Flask示例
2. 使用命令行参数
"雪糕刺客"——这个名字让我想起了那些隐藏在默认配置中的"冷冻危险"
一些程序支持通过命令行参数来设置日志级别。例如对于gunicorn程序:
export GLOG_v=2
nohup gunicorn my_app:app --log-level info &
# 或直接:
GLOG_v=2 nohup gunicorn my_app:app --log-file - --access-logfile - &
# 注意:--log-level可选值包括debug/info/warning/error
# --access-logfile控制访问日志输出
3. 使用环境变量控制
"记住..."——记住这个方法可以让你在不同环境中快速切换!
某些应用会检查特定环境变量来调整行为:
# Bash示例
export LOG_LEVEL="WARNING"
export NOHUP_OUT="custom.log"
nohup python app.py>> "$NOHUP_OUT" 2>&1 &
# Python代码中读取:
log_level = os.getenv
numeric_level = getattr,None)
if not isinstance:
raise ValueError
logger.setLevel
⚠️ 危险警告!⚠️ 默认情况下...
"推倒重来"可能成为你唯一选择!如果不及时调整... 1. 日志文件会迅速膨胀至几十GB 2. grep/sed等工具查找效率直线下降 3. I/O压力导致服务器响应延迟 4. 错误信息被淹没在海量普通信息中 5. 调试时间从分钟延长至小时甚至天数... - 没有调整过的人都这样说 -
4. tee命令与实时监控结合使用★★★★☆
"我悟了!原来还有这种操作..."——结合现代监控工具真香!不仅保留传统功能还能获得更强大能力:
tail -f nohup.out | grep -E 'ERROR|WARNING'
tail -F nohup.out | \ awk '{print strftime,$0}' | \ tee>> | nc localhost 8888 & # 发送到监控服务
multitail nohup.out -s r 'ERROR\|WARNING' dstat --no-disk --no-net | while read line;do echo "$line";done>> stats.log & watch "tail -5 /var/log/nohup/*" lsof +D /path/to/logs # 检查打开的文件描述符
systemctl start myservice.service # 自动重启+标准错误分离+限制资源使用情况 journalctl SYSTEMDUNIT=myservice.service --since today -f journalctl SYSTEMDUNIT=myservice.service -o json-pretty | jq .MESSAGE | less
echo "/var/log/nohup/*.out { daily missingok rotate 7 compress delaycompress notifempty createolddirs sharedscripts postrotate killall -HUP syslogd endscript}" | sudo tee /etc/logrotate.d/nohuplog
systemctl restart rsyslog # 生效配置更改
find /var/log/nohup/ -type f!-mtime +7,-name ".gz"!-name ".old"!老实说,-size +1M!\ \ echo "alias ll='lsblk'">> ~/.bashrc # 快速查看硬盘空间情况
curl ifconfig.me # 检查网络连接是否正常以确保远程收集可靠性
sudo iptables-save> ~/iptables.bak # 防止防火墙阻断监控端口导致失联风险增大... cp ~/.ssh/authorized_keys ~/backup/ sudo dpkg-reconfigure tzdata # 时区校准确保时间戳准确度达到微秒级!
history | awk '{print $NF}' | sort | uniq | xargs apt-cache policy # 检查已安装组件版本是否匹配当前需求
docker logs containername --since=60s --tail=50 &> dockerlogs.txt && notify-send "Docker Logs Updated"
ps auxw | awk '$1=="youruser"{print $NF}' # 快速定位所有属于指定使用者的进程方法避免误操作!df –i && du –sh . && ip addr show && netstat –ano && lsof –iTCP –P –n && vmstat –t && mpstat –P ALL && uptime && wget https://raw.githubusercontent.com/.../check.sh?$|bash –
strace tail –f $&>trace.log & pid=$!话说回来,sleep 1 kill $pid &>kill.log& sleep .5 killall strace&>killstrace.log& rm trace.* kill.*
chmod u+x ./healthcheck.sh;crontab echo $+MIN)) ];n head–echo $+MIN))$f>$tmp&&mv$tmp$f&&echo “Rotated”$ffile>rotatelog else echo “Skipped”$ffile>rotate_log fi done;话说回来,
cat *.out|awk '{sub;sub} NR%7==1{printf "\xEF\xBF\xBD\xEF\xBF\xBD"} {print}'|less--quit-if-one-screen--RAW-CONTROL-CHARS--LONG-LINES;
perl–e 'while { $_ =~ s/\x{FFFD}/\U$&/g;print }'
curl–X POST https://api.openwearmap.org/data/2.5/wear?lat={lat}&lon={lon}&appid={key}&units=metric|curl–request POST https://slack.com/api/chat.postMessage—header Content-Type:application/json—header Authorization:Bearer xoxb-xxxx—data-urlencode ‘payload={"channel":"alert"。"text":"Wear alert at ’$’:\’\’","attachments":}’
screen-RSessionsMonitoring$$;
tmux new-session-d ‘while true;说起来,do cat *.out|tail-n +99999999>/dev/null||sleep${interval:-60};done’
三、 日志调整技巧 ★★★★☆
- 选择合适的日誌級別: DEBUG))))→選擇權衡點為資源消耗與診斷深度之間平衡關係式計算結果應≤系數乘積閾值範圍內!
import signal def handler: logger.info if signum == SIGUSR1:
newlevel=getattr elif signum == SIGUSR2:
newlevel=getattr logger.setLevel
signal.signal signal.signal: $kill-USR1 PIDTOINCREASEVERBOSITY;/usr/bin/kill-USR2 PIDTOREDUCEVERBOSITY;/usr/bin/kill-HUP PIDTORELOAD_CONFIG;&&/usr/local/bin/reload-service.sh&
再看※註解,表示需要聯動其他監測系統數據來源做交叉驗證決策判斷依據;=需通知運維團隊緊急處理事項;说起来,當即觸發災難恢復流水線

