質問
node.jsとExpressを使ったWebアプリケーション(フォルダー構成はexpress-generatorで作成)を作っています。
ログの出力をlog4jsを使って出力したいと思い、log4jsのドキュメントから以下URLの記述を真似することでアクセスログをlog4jsを介して出力されることは確認出来ましたが
https://github.com/log4js-node/log4js-node/blob/master/docs/connect-logger.md
routesフォルダー配下にあるrouteメソッドを記述したファイル(index.js)からlog4jsを使ってアプリケーションログを出力したいのですがlogger is not defined
と出力されます。
外出しされたjsファイルからlog4jsを呼び出してアプリケーションログを出力する方法についてご教示頂けますでしょうか。
app.js
// import設定 // var createError = require('http-errors'); const express = require('express'); const bodyParser = require('body-parser'); const path = require('path'); const cookieParser = require('cookie-parser'); const log4js = require('log4js'); const helmet = require('helmet'); // Express設定 var app = express(); // テンプレートエンジン設定 app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); // log設定 log4js.configure({ appenders: { console: { type: 'console' } }, categories: { default: { appenders: ['console'], level: 'info' } } }); const appName = require('./package.json').name; const logger = log4js.getLogger(appName); app.use(log4js.connectLogger(logger, { level: process.env.LOG_LEVEL || 'auto' })); // body-parser設定 app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); // cookie設定 app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); // helmet設定 app.use(helmet()); app.use(helmet.noCache()); // ルーティング設定 var indexRouter = require('./routes/index'); // catch 404 and forward to error handler app.use(function(req, res, next) { var err = new Error('Not Found'); err.code = 404; err.message = 'Not Found'; next(err); }); // error handler app.use(function(err, req, res, next) { // render the error page const error = { code: err.code || 'ERROR', message: err.message || err }; res.status(err.status || err.code || 500).render('error'); }); module.exports = app;
index.js
const express = require('express'); const router = new express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { console.log('[GET]call /'); // 問題調査用に記載:リクエストが届いているか確認 logger.info('[GET]render page'); res.status(200).render('index', { title: 'Express', body: 'Welcome to Express' }); }); module.exports = router;
www
#!/usr/bin/env node /** * Module dependencies. */ var app = require('../app'); var debug = require('debug')('demo:server'); var http = require('http'); /** * Get port from environment and store in Express. */ var port = normalizePort(process.env.PORT || '3000'); app.set('port', port); /** * Create HTTP server. */ var server = http.createServer(app); /** * Listen on provided port, on all network interfaces. */ server.listen(port); server.on('error', onError); server.on('listening', onListening); /** * Normalize a port into a number, string, or false. * @param val is port number. * @returns return port number. */ function normalizePort(val) { var port = parseInt(val, 10); if (isNaN(port)) { // named pipe return val; } if (port >= 0) { // port number return port; } return false; } /** * Event listener for HTTP server "error" event. */ function onError(error) { if (error.syscall !== 'listen') { throw error; } var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port; // handle specific listen errors with friendly messages switch (error.code) { case 'EACCES': console.error(bind + ' requires elevated privileges'); process.exit(1); break; case 'EADDRINUSE': console.error(bind + ' is already in use'); process.exit(1); break; default: throw error; } } /** * Event listener for HTTP server "listening" event. */ function onListening() { var addr = server.address(); var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port; console.log('[INFO][Express]Listening on ' + bind); debug('Listening on ' + bind); }
ローカルPCのコンソールで出力されたログ
$ node ./bin/www [INFO][Express]Listening on port 3000 [GET]call / [2019-02-16T20:36:07.578] [ERROR] demo - [ERROR]call error handler.error is: { "code": "ERROR", "message": "logger is not defined" } [2019-02-16T20:36:07.610] [INFO] demo - ::1 - - "GET / HTTP/1.1" 500 156 "" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"
環境
node.js:8.15
フレームワーク:Express
稼働環境:IBM Cloud/ローカルPCで動作がokだったらPaaSへ上げています
package.json
"dependencies": { "body-parser": "^1.18.3", "cookie-parser": "~1.4.3", "debug": "~2.6.9", "ejs": "^2.6.1", "express": "~4.16.0", "express-validator": "^5.3.1", "helmet": "^3.15.1", "http-errors": "~1.6.2", "log4js": "^4.0.2", "morgan": "~1.9.0", "mqlight": "^2.0.2017081002", "request": "^2.88.0" }
環境構成
/ROOT FOLDER/ L app.js L package.json L /bin/ L www L /public/ L /routes/ L index.js L /test/ L /views/ L index.ejs
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。