log4jsからsyslogにログ出力できなかったのでposix(rsyslog)にした
契機
node.jsのコードを書いていて、ログ出力を制御したい
log4jsを使っていたが、ログローテート設定とかをアプリ側で管理していた どうせなら両方同じrsyslogで管理したい
ログローテートもlogrotateも同様にlogrotateで管理したい
やったこと
log4js+log4js-syslog-appender
log4jsにはsyslog出力の機能がない
が、動かない
winston+winston-syslog
が、動かない
syslog-ng対応っぽい
syslog-ngとrsyslogは全く別モン
posix
これでいけた
log4js+log4js-syslog-appender
モジュールのインストール
code:install_node_modules.js
npm i log4js
npm i log4js-syslog-appender
動作確認コードの実装
code:index.js
const Log4js = require('log4js');
Log4js.configure({
appenders:{
system:{
type:"log4js-syslog-appender",
facility:"local0",
hostname:"localhost",
port:514,
transport:"UDP"
},
console:{
type:"console"
}
},
categories:{
default:{
appenders:[
"system",
"console"
],
level:"debug"
}
}
});
const syslog = Log4js.getLogger("system");
syslog.debug("debug");
syslog.info("info");
syslog.warn("warn");
syslog.error("error");
動作確認
node index.js
結果(コンソール)
ログファイル
ファイルが生成されず...。
If some still wants to maintain this, just leave me a message, I'll be happy to hand over ownership.
もうメンテしてない。他によりよりフレームワークがあるからそっち使え、ということらしい
winston+winston-syslog
上記同様に試したけれど、syslog-ng用らしく諦めた
posix
code:posix.js
var posix = require('posix');
posix.openlog(process.argv1, {cons: true, ndelay: true, pid: true}, 'local1'); posix.syslog('debug', 'debug');
posix.syslog('info', 'info');
posix.syslog('warning', 'warning');
posix.syslog('err', 'err');
posix.closelog();
/var/log/syslogにログが出力されることを確認した
が、rsyslog.d/confの設定が適用されていないようで、ログが別ファイルに吐かれていない
Linuxのloggerコマンドでも失敗していたのでそもそも設定が間違ってるようだった
下記の設定に記載のファイル所有権限をsyslog:admに変更したらloggerからいけた
code:/etc/rsyslog.conf
#
# Set the default permissions for all log files.
#
$FileOwner syslog
$FileGroup adm
$FileCreateMode 0640
$DirCreateMode 0755
$Umask 0022
$PrivDropToUser syslog
$PrivDropToGroup syslog
node.jsのコードから実行してもrsyslogでログの振り分けが実行できた
以上