log時間輸出格式
目前觀察下來log所輸出的是UTC+0的時間,希望可以依照系統時區輸出。 第一次寫nodejs,寫了一段很醜的代碼:
in common.js
function dt() {
//return new Date().toJSON().replace('T', ' ').replace('Z', ' ').split('.')[0]
return new Date().toLocaleDateString([],{year: "numeric",month: "2-digit",day: "2-digit"}).replace(/(\d\d)\/(\d\d)\/(\d{4})/, "$3-$1-$2") + " " + new Date().toLocaleTimeString([],{hourCycle: 'h23'})
}
in app.js
process.env.TZ = '<your timezone>'
function dt() {
const d = new Date()
d.setMinutes(d.getMinutes() - d.getTimezoneOffset())
return d.toJSON().replace('T', ' ').replace('Z', ' ').split('.')[0]
}
改了下,JS 的 Date 是可以直接获取到系统的时区的,当然我这就不改了,要不要尝试弄个 pull request 练手下 ?
或是直接使用systemd輸出到journalctl,並把app.js裡所有的logt()改成log()。(因為journalctl已經有時間戳)
[Unit]
Description=aria2 ban unwelcome clients via ipset
After=network.target aria2.service
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/node /usr/local/bin/aria2b
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=aria2b
[Install]
WantedBy=multi-user.target
在vim /etc/rsyslog.conf裡加入
:programname, isequal, "aria2b" -/var/log/aria2b.log
& stop
記得重啟rsyslog
systemctl restart rsyslog
Sample Output cat /var/log/aria2b.log

就是大家运行起来的方式都有差异,这里我们就再多几个可以开关的选项感觉比较好。 目前想了下,这部分就以环境变量的形式安排比较好点?
日志前缀:
Environment="OUTPREFIX=''"
不输出时间:
Environment="OUTDATE=false"
之类的来安排 // 取名困难,不知道这样好不好
以及感觉还可以考虑弄个 -O 之类的选项来输出日志到指定文件(然而不知道 logrotate 要怎么安排了,不知道有没有现成项目来完成这个)
以我的系統環境為例(UTC+8)
我嘗試使用原本的函數印出來的結果,看起來是直接印出格林威治時間(UTC+0)

以我的系統環境為例(UTC+8) 我嘗試使用原本的函數印出來的結果,看起來是直接印出格林威治時間(UTC+0)
印象中我使用 .toJSON() 只是因为这个格式出来的直观点,然后 UTC 时间对于我来说没什么影响然后当时就懒得加时区回来了,修复后的代码可以参考上面的 comments
以及尝试下 fork 项目然后发个 pull request ? 我觉得这样可以练练手熟悉下 Git(hub)
done #b024962