From aa61fc86db4f5ebf645ecf69c6f5ec36f2973e5a Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 21 Feb 2014 11:14:47 -0500
Subject: [PATCH] Add GO launch parameter to specify daily, rolling log file generation

---
 src/main/java/com/gitblit/GitBlitServer.java |   34 ++++++++++++++++++++++++++++++++++
 releases.moxie                               |    3 ++-
 src/main/java/log4j.properties               |    4 ++--
 src/site/setup_go.mkd                        |    5 +++--
 4 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/releases.moxie b/releases.moxie
index 4fa313a..0aa35ef 100644
--- a/releases.moxie
+++ b/releases.moxie
@@ -60,7 +60,8 @@
 	- Added raw links to the commit, commitdiff, and compare pages (issue-319)
 	- Support intradocument linking in Markdown content using [[WikiLinks]] syntax (issue-324)
 	- Support Markdown image links relative to the repository root (issue-324)
-	- Added filesystem write permission check (issue-345) 
+	- Added filesystem write permission check (issue-345)
+	- Added GO launch parameter for redirecting logging to a rolling, daily log file (issue-348)
 	- Support rendering confluence, mediawiki, textile, tracwiki, and twiki markup documents
 	- Added setting to globally disable anonymous pushes in the receive pack
 	- Added a normalized diffstat display to the commit, commitdiff, and compare pages
diff --git a/src/main/java/com/gitblit/GitBlitServer.java b/src/main/java/com/gitblit/GitBlitServer.java
index 522fb57..1e51577 100644
--- a/src/main/java/com/gitblit/GitBlitServer.java
+++ b/src/main/java/com/gitblit/GitBlitServer.java
@@ -20,6 +20,7 @@
 import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.net.InetAddress;
@@ -33,8 +34,10 @@
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
+import java.util.Properties;
 import java.util.Scanner;
 
+import org.apache.log4j.PropertyConfigurator;
 import org.eclipse.jetty.ajp.Ajp13SocketConnector;
 import org.eclipse.jetty.security.ConstraintMapping;
 import org.eclipse.jetty.security.ConstraintSecurityHandler;
@@ -179,6 +182,34 @@
 				settings = new FileSettings(params.settingsfile);
 			}
 		}
+
+		if (params.dailyLogFile) {
+			// Configure log4j for daily log file generation
+			InputStream is = null;
+			try {
+				is = getClass().getResourceAsStream("/log4j.properties");
+				Properties loggingProperties = new Properties();
+				loggingProperties.load(is);
+
+				loggingProperties.put("log4j.appender.R.File", new File(baseFolder, "logs/gitblit.log").getAbsolutePath());
+				loggingProperties.put("log4j.rootCategory", "INFO, R");
+
+				if (settings.getBoolean(Keys.web.debugMode, false)) {
+					loggingProperties.put("log4j.logger.com.gitblit", "DEBUG");
+				}
+
+				PropertyConfigurator.configure(loggingProperties);
+			} catch (Exception e) {
+				e.printStackTrace();
+			} finally {
+				try {
+					is.close();
+				} catch (IOException e) {
+					e.printStackTrace();
+				}
+			}
+		}
+
 		logger = LoggerFactory.getLogger(GitBlitServer.class);
 		logger.info(Constants.BORDER);
 		logger.info("            _____  _  _    _      _  _  _");
@@ -614,6 +645,9 @@
 		@Parameter(names = { "--tempFolder" }, description = "Folder for server to extract built-in webapp")
 		public String temp = FILESETTINGS.getString(Keys.server.tempFolder, "temp");
 
+		@Parameter(names = { "--dailyLogFile" }, description = "Log to a rolling daily log file INSTEAD of stdout.")
+		public Boolean dailyLogFile = false;
+
 		/*
 		 * GIT Servlet Parameters
 		 */
diff --git a/src/main/java/log4j.properties b/src/main/java/log4j.properties
index ea29bde..c6b5d8c 100644
--- a/src/main/java/log4j.properties
+++ b/src/main/java/log4j.properties
@@ -49,9 +49,9 @@
 log4j.appender.R = org.apache.log4j.DailyRollingFileAppender
 log4j.appender.R.File = logs/gitblit.log
 log4j.appender.R.Append = true
-log4j.appender.R.DatePattern = '.'yyy-MM-dd
+log4j.appender.R.DatePattern = '.'yyyy-MM-dd
 log4j.appender.R.layout = org.apache.log4j.PatternLayout
-log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %c-30{1} [%-5p] %m%n
+log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%-5p] %m%n
 
 #------------------------------------------------------------------------------
 #
diff --git a/src/site/setup_go.mkd b/src/site/setup_go.mkd
index 5d422fa..2e8f864 100644
--- a/src/site/setup_go.mkd
+++ b/src/site/setup_go.mkd
@@ -124,6 +124,7 @@
     --alias                Alias in keystore of SSL cert to use for https serving
     --storePassword        Password for SSL (https) keystore.
     --shutdownPort         Port for Shutdown Monitor to listen on. (port <= 0 will disable this monitor)
+	--dailyLogFile         Redirect logging to a rolling, daily log file instead of stdout
     --tempFolder           Folder for server to extract built-in webapp
     
 **Example**
@@ -135,6 +136,6 @@
 You can override Gitblit GO's default Log4j configuration with a command-line parameter to the JVM.
 
     java -Dlog4j.configuration=file:///home/james/log4j.properties -jar gitblit.jar <optional_gitblit_args>
-    
-For reference, here is [Gitblit's default Log4j configuration](https://github.com/gitblit/gitblit/blob/master/src/log4j.properties).  It includes some file appenders that are disabled by default. 
+
+You can not use override the default log4j configuration *AND* specify the `--dailyLogFile` parameter.  For reference, here is [Gitblit's default Log4j configuration](https://github.com/gitblit/gitblit/blob/master/src/log4j.properties).  It includes some file appenders that are disabled by default. 
 

--
Gitblit v1.9.1