CloudFunction でアクセスログを書きたい
makeMiddleware
この実装を logging-winston, logging-bunyan で使っている
makeMiddleware 使うと httpRequest に手を入れられない
childLogger を返したくない(返せない)ときに req.log を undefined で上書きしちゃう
middleware 使う順序の問題
各所で CloudFunctions なら emitRequestLog を作らないようになっている... issue で聞くか
自前でやるならこれぐらいの middleware でよい、trace もできる
code:access_log.js
const { Logging, Log, middleware } = require("@google-cloud/logging");
exports.loggingAccessLog = options => {
const projectId = options.projectId || process.env("GCLOUD_PROJECT");
const requestLogName = Log.formatName_(
projectId,
options.logName || "request_log"
);
const logging = new Logging(options);
const log = logging.log(requestLogName);
const emitRequestLog = (httpRequest, trace) => {
const entry = log.entry({ trace, httpRequest }, {});
return log.write(entry);
};
return middleware.express.makeMiddleware(projectId, () => {}, emitRequestLog);
};
makeHttpRequestData
remoteIp が入らない 👉 PR してもいいかも
remotIp が空なので undefined になる、せめて - かなあ
https://gyazo.com/599b75e6c719792a6ae40795bcc38a3a
req.ip は使える
{"result":"1.1.1.1"}
X-Forwarded-For の先頭を見るのでよさそうか?
304 になる
function トップで express を使っているときに内部で 304 になっている?
app.get("/", (req, res) => ...)
のときに、slash なしURL へのアクセス → "/" が実行 → なんかしら 304
なぜ?
logging に metadata だけ書きたい
code:logging
const logging = new Logging(options);
const log = logging.log(requestLogName);
const entry = log.entry({ trace, httpRequest }, {});
log.write(entry);
log.entry の第2引数