Index: trunk/grails-app/conf/Config.groovy
===================================================================
--- trunk/grails-app/conf/Config.groovy	(revision 357)
+++ trunk/grails-app/conf/Config.groovy	(revision 358)
@@ -59,5 +59,5 @@
         rollingFile name:"appLog",
                         file:"${logDirectory}/${appName}.log".toString(),
-                        maxFileSize:'1MB',
+                        maxFileSize:'300kB',
                         maxBackupIndex:0,
                         layout:pattern(conversionPattern: '%d{[EEE, dd-MMM-yyyy @ HH:mm:ss.SSS]} [%t] %-5p %c %x - %m%n')
Index: trunk/grails-app/controllers/AppCoreController.groovy
===================================================================
--- trunk/grails-app/controllers/AppCoreController.groovy	(revision 357)
+++ trunk/grails-app/controllers/AppCoreController.groovy	(revision 358)
@@ -1,3 +1,4 @@
 import org.codehaus.groovy.grails.plugins.springsecurity.Secured
+import org.codehaus.groovy.grails.commons.*
 
 /**
@@ -193,3 +194,14 @@
     }
 
+    /**
+    * Render the application log file.
+    */
+    @Secured(['ROLE_AppAdmin'])
+    def appLog = {
+        def file = new File(ConfigurationHolder.config.log4j.appenders.appLog.file)
+
+        // Success.
+        [log: file.text]
+    }
+
 } // end of class.
Index: trunk/grails-app/controllers/SectionDetailedController.groovy
===================================================================
--- trunk/grails-app/controllers/SectionDetailedController.groovy	(revision 357)
+++ trunk/grails-app/controllers/SectionDetailedController.groovy	(revision 358)
@@ -3,4 +3,6 @@
 @Secured(['ROLE_AppAdmin', 'ROLE_Manager', 'ROLE_AssetManager'])
 class SectionDetailedController extends BaseController {
+
+    def sectionService
 
     // the delete, save and update actions only accept POST requests
@@ -29,20 +31,20 @@
     @Secured(['ROLE_AppAdmin'])
     def delete = {
-        def sectionInstance = Section.get( params.id )
-        if(sectionInstance) {
-            try {
-                sectionInstance.delete(flush:true)
-                flash.message = "Section ${params.id} deleted"
-                redirect(action:list)
-            }
-            catch(org.springframework.dao.DataIntegrityViolationException e) {
-                flash.message = "Section ${params.id} could not be deleted"
-                redirect(action:show,id:params.id)
-            }
+        def result = sectionService.delete(params)
+
+        if(!result.error) {
+            flash.message = g.message(code: "default.delete.success", args: ["Section", params.id])
+            redirect(action:list)
+            return
         }
-        else {
-            flash.message = "Section not found with id ${params.id}"
+
+        flash.errorMessage = g.message(code: result.error.code, args: result.error.args)
+
+        if(result.error.code == "default.not.found") {
             redirect(action:list)
+            return
         }
+
+        redirect(action:show, id: params.id)
     }
 
Index: trunk/grails-app/views/appCore/appAdmin.gsp
===================================================================
--- trunk/grails-app/views/appCore/appAdmin.gsp	(revision 357)
+++ trunk/grails-app/views/appCore/appAdmin.gsp	(revision 358)
@@ -17,4 +17,13 @@
                 <table>
                     <tbody>
+
+                        <tr class="prop">
+                            <td valign="top" class="name">
+                                <label>Log:</label>
+                            </td>
+                            <td valign="top" class="value">
+                                <g:link action="appLog">View</g:link> - The application log file.
+                            </td>
+                        </tr>
 
                         <tr class="prop">
Index: trunk/grails-app/views/appCore/appLog.gsp
===================================================================
--- trunk/grails-app/views/appCore/appLog.gsp	(revision 358)
+++ trunk/grails-app/views/appCore/appLog.gsp	(revision 358)
@@ -0,0 +1,20 @@
+<html>
+    <head>
+        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+        <meta name="layout" content="main" />
+        <title>Application Log</title>
+        <nav:resources override="true"/>
+    </head>
+    <body onload="textAreaScrollBottom('log');">
+        <div class="nav">
+            <h1>Application Log</h1>
+        </div>
+        <div class="body">
+
+            <textarea rows="30" cols="90" id="log" name="log" readonly="yes">
+                ${log.encodeAsHTML()}
+            </textarea>
+
+        </div> <!--End body-->
+    </body>
+</html>
Index: trunk/web-app/css/main.css
===================================================================
--- trunk/web-app/css/main.css	(revision 357)
+++ trunk/web-app/css/main.css	(revision 358)
@@ -55,4 +55,9 @@
     float: left;
     /*border: 1px solid #ccc;*/
+}
+
+#log {
+    width: 920px;
+    height: auto;
 }
 
Index: trunk/web-app/js/jsUtil.js
===================================================================
--- trunk/web-app/js/jsUtil.js	(revision 357)
+++ trunk/web-app/js/jsUtil.js	(revision 358)
@@ -35,2 +35,10 @@
     }
 }
+
+function textAreaScrollBottom(id) {
+    $(id).scrollTop = $(id).scrollHeight;
+}
+
+function focusUtil(id) {
+    $(id).focus();
+}
