Logowanie na żądanie w Node.js

Jestem doświadczonym programistą Java pobierającym Node.js i przechodzącym na model asynchroniczny. Większość rzeczy idzie dobrze, oprócz logowania. Nie mogę znaleźć niczego podobnego do log4j i NDC w Javie podczas tworzenia w Node.js za pomocą express.

Moim celem jest, aby każda instrukcja dziennika automatycznie dodawała następujące informacje:

[2013-11-07 11: 17: 04.615 serverScript INFO 7036 192.168.7.209]

Obejmuje to znacznik czasu, nazwę pliku js zapisującego tę instrukcję (dla modularnych aplikacji węzłowych), poziom debugowania, identyfikator procesu (działające klastry) oraz adres IP klienta.

Mogę go napisać, gdy początkowo wejdzie do mojego programu obsługi żądań, ale bez propagowania wielu parametrów do każdej wywoływanej funkcji, instrukcje loggera wewnątrz podprogramów nie mają informacji. Wiem, że mogę utworzyć instancję mojego programu rejestrującego w każdym pliku js, który inicjalizuje jego nazwę, ale muszę jeszcze znaleźć rozwiązanie dla adresu IP klienta. W przypadku dłuższych uruchomionych żądań adres, który ustawiłem w moim programie rejestrującym, zostanie zastąpiony, gdy nadejdzie następne żądanie, więc zarejestrowane adresy IP zostaną przekroczone.

Patrzyłem na Winstona, ale nie byłem w stanie rozwiązać tego problemu nawet z tym. Czy ktoś to osiągnął? Bardzo przydatne są pola śledzenia, gdy można filtrować według IP, aby wyświetlić tylko aktywność jednego użytkownika.

[edytuj: testuj z rozwiązania przekazywania parametrów, dopóki nie nauczę się syslog]

[2013-11-07 14:29:28.641 server INFO  7527 192.168.7.209] Got request from 192.168.7.209 for /ionmed/executeQuery?
[2013-11-07 14:29:28.641 router INFO  7527 192.168.7.209] About to route a request for /ionmed/executeQuery, method=POST
[2013-11-07 14:29:28.642 router INFO  7527 192.168.7.209] getting POSTed data
[2013-11-07 14:29:28.642 router INFO  7527 192.168.7.209] POST params: {"sqlQuery":"select sleep(10)","sessionStart":"1383852558799","rand":"0.5510970998368581","jsessionid":"117DBAA89F599D923AF80D4AB171BDDF"}
[2013-11-07 14:29:28.642 requestHandlers INFO  7527 192.168.7.209] 'query' was called.
[2013-11-07 14:29:28.642 requestHandlers INFO  7527 192.168.7.209] select sleep(10)
[2013-11-07 14:29:30.673 server INFO  7527 192.168.7.217] Got request from 192.168.7.217 for /
[2013-11-07 14:29:30.673 router INFO  7527 192.168.7.217] About to route a request for /, method=GET
[2013-11-07 14:29:30.673 router INFO  7527 192.168.7.217] No request handler found for /; serving as file
[2013-11-07 14:29:30.673 router INFO  7527 192.168.7.217] Request handler 'serveFile' was called to get: /index.html
[192.168.7.217 Thu, 07 Nov 2013 19:29:30 GMT] HTTP/1.1 GET "/node/" 200 "Mozilla/5.0 (iPod; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3"
[2013-11-07 14:29:33.578 server INFO  7527 192.168.7.217] Got request from 192.168.7.217 for /
[2013-11-07 14:29:33.578 router INFO  7527 192.168.7.217] About to route a request for /, method=GET
[2013-11-07 14:29:33.578 router INFO  7527 192.168.7.217] No request handler found for /; serving as file
[2013-11-07 14:29:33.579 router INFO  7527 192.168.7.217] Request handler 'serveFile' was called to get: /index.html
[192.168.7.217 Thu, 07 Nov 2013 19:29:33 GMT] HTTP/1.1 GET "/node/" 200 "Mozilla/5.0 (iPod; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3"
[2013-11-07 14:29:38.644 requestHandlers INFO  7527 192.168.7.209] sending response
[192.168.7.209 Thu, 07 Nov 2013 19:29:38 GMT] HTTP/1.1 POST "/node/ionmed/executeQuery?" 200 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0"
[2013-11-07 14:29:41.540 server INFO  7527 192.168.7.217] Got request from 192.168.7.217 for /
[2013-11-07 14:29:41.541 router INFO  7527 192.168.7.217] About to route a request for /, method=GET
[2013-11-07 14:29:41.541 router INFO  7527 192.168.7.217] No request handler found for /; serving as file
[2013-11-07 14:29:41.541 router INFO  7527 192.168.7.217] Request handler 'serveFile' was called to get: /index.html
[192.168.7.217 Thu, 07 Nov 2013 19:29:41 GMT] HTTP/1.1 GET "/node/" 200 "Mozilla/5.0 (iPod; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3"
[2013-11-07 14:29:45.146 server INFO  7527 192.168.7.209] RLz6tmJ7KTH2R16VCVTX: bye {"user":"1"}
[2013-11-07 14:29:45.176 server INFO  7527 192.168.7.209] RLz6tmJ7KTH2R16VCVTX: disconnected

Teraz muszę tylko dowiedzieć się, jak uzyskać ekspresowy rejestrator żądań w tym samym formacie wejścia liniowego, co mój wewnętrzny rejestrator, dopóki nie zostanie przeniesiony do rsyslog.

questionAnswers(3)

yourAnswerToTheQuestion