From 55d84d0f9bef4f5bac44423de7b7e991c00d56fb Mon Sep 17 00:00:00 2001
From: Andrew Darqui <andrew.darqui@gmail.com>
Date: Wed, 2 Oct 2013 00:25:46 -0400
Subject: [PATCH] basic logger functionality added - accessible via
 http://nodebb/admin/logger

---
 public/src/templates.js           |  2 +-
 public/templates/admin/header.tpl |  3 ++-
 public/templates/admin/logger.tpl | 33 +++++++++++++++++++++++++++++++
 public/templates/config.json      |  3 ++-
 src/routes/admin.js               |  8 ++++++--
 src/webserver.js                  | 11 +++++++++--
 6 files changed, 53 insertions(+), 7 deletions(-)
 create mode 100644 public/templates/admin/logger.tpl

diff --git a/public/src/templates.js b/public/src/templates.js
index 82c0438b05..a47ac42e73 100644
--- a/public/src/templates.js
+++ b/public/src/templates.js
@@ -306,4 +306,4 @@
 	module: {
 		exports: {}
 	}
-} : module)
\ No newline at end of file
+} : module)
diff --git a/public/templates/admin/header.tpl b/public/templates/admin/header.tpl
index 72469a018a..8a5ca43dae 100644
--- a/public/templates/admin/header.tpl
+++ b/public/templates/admin/header.tpl
@@ -84,6 +84,7 @@
 						<li class=''><a href='{relative_path}/admin/plugins'><i class='icon-code-fork'></i> Plugins</a></li>
 						<li class=''><a href='{relative_path}/admin/settings'><i class='icon-cogs'></i> Settings</a></li>
 						<li class=''><a href='{relative_path}/admin/redis'><i class='icon-hdd'></i> Redis</a></li>
+						<li class=''><a href='{relative_path}/admin/logger'><i class='icon-th'></i> Logger</a></li>
 						<li class=''><a href="{relative_path}/admin/motd"><i class="icon-comment"></i> MOTD</a></li>
 
 						<li class="nav-header">Social Authentication</li>
@@ -107,4 +108,4 @@
 					</ul>
 				</div><!--/.well -->
 			</div><!--/span-->
-			<div class="col-md-9" id="content">
\ No newline at end of file
+			<div class="col-md-9" id="content">
diff --git a/public/templates/admin/logger.tpl b/public/templates/admin/logger.tpl
new file mode 100644
index 0000000000..c8abacff9b
--- /dev/null
+++ b/public/templates/admin/logger.tpl
@@ -0,0 +1,33 @@
+<h1>Logger</h1>
+<hr />
+
+<h3>Logger Settings</h3>
+<div class="alert alert-warning">
+
+    <p>
+		By enabling the check box, you will receive http logs to standard output. If you specify a path, logs will then be saved to a file instead.
+    </p>
+	<br/>
+
+	<form>
+
+		<label>
+			<input type="checkbox" data-field="loggerStatus"> <strong>Enable logging</strong>
+		</label>
+		<br/>
+
+		<label>Path to log file</label>
+		<input class="form-control" type="text" placeholder="/path/to/log/file.log" data-field="loggerPath" /><br />
+	</form>
+</div>
+
+<button class="btn btn-lg btn-primary" id="save">Save</button>
+
+<script>
+	var	loadDelay = setInterval(function() {
+		if (nodebb_admin) {
+			nodebb_admin.prepare();
+			clearInterval(loadDelay);
+		}
+	}, 500);
+</script>
diff --git a/public/templates/config.json b/public/templates/config.json
index f97cd5ce26..636ef7f0b3 100644
--- a/public/templates/config.json
+++ b/public/templates/config.json
@@ -11,6 +11,7 @@
 		"^admin/settings.*": "admin/settings",
 		"admin/twitter.*": "admin/twitter",
 		"admin/facebook.*": "admin/facebook",
+		"admin/logger.*": "admin/logger",
 		"admin/gplus.*": "admin/gplus",
 		"admin/motd/?$": "admin/motd",
 		"admin/groups/?$": "admin/groups",
@@ -41,4 +42,4 @@
 	"force_refresh": {
 		"logout": true
 	}
-}
\ No newline at end of file
+}
diff --git a/src/routes/admin.js b/src/routes/admin.js
index b6db9cf925..a26a1be15c 100644
--- a/src/routes/admin.js
+++ b/src/routes/admin.js
@@ -30,7 +30,7 @@ var user = require('./../user.js'),
 		(function () {
 			var routes = [
 				'categories/active', 'categories/disabled', 'users', 'topics', 'settings', 'themes',
-				'twitter', 'facebook', 'gplus', 'redis', 'motd', 'groups',
+				'twitter', 'facebook', 'gplus', 'redis', 'motd', 'groups','logger',
 				'users/latest', 'users/sort-posts', 'users/sort-reputation',
 				'users/search', 'plugins'
 			];
@@ -224,6 +224,10 @@ var user = require('./../user.js'),
 				res.json(200, {});
 			});
 
+			app.get('/logger', function(req, res) {
+				res.json(200, {});
+			});
+
 			app.get('/themes', function (req, res) {
 				res.json(200, {});
 			});
@@ -257,4 +261,4 @@ var user = require('./../user.js'),
 	};
 
 
-}(exports));
\ No newline at end of file
+}(exports));
diff --git a/src/webserver.js b/src/webserver.js
index 7212d3d235..3911c59c16 100644
--- a/src/webserver.js
+++ b/src/webserver.js
@@ -79,9 +79,16 @@ var express = require('express'),
 			function(next) {
 				// Pre-router middlewares
 				app.use(express.compress());
-				if(nconf.get("express:logger") == true) {
-					app.use(express.logger());
+
+				if(nconf.get("express:logger") == true || meta.config.loggerStatus > 0) {
+					var loggerObj = {};
+					if(meta.config.loggerPath) {
+						loggerObj.stream = fs.createWriteStream(meta.config.loggerPath, {flags: 'a'});
+						meta.config.loggerStream = loggerObj.stream
+					}
+					app.use(express.logger(loggerObj));
 				}
+
 				app.use(express.favicon(path.join(__dirname, '../', 'public', 'favicon.ico')));
 				app.use(require('less-middleware')({
 					src: path.join(__dirname, '../', 'public'),