From 966ebbf36a8de588b162c63db8fd425661c2e17e Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Tue, 1 Jun 2010 07:52:45 -0500 Subject: [PATCH] Added logging support using SLF4J backed by Log4J. --- pit-swing/application.properties | 2 +- pit-swing/griffon-app/conf/Events.groovy | 5 +++ .../jdbernard/pit/swing/PITController.groovy | 31 +++++++++++------- .../pit/swing/ProjectPanelController.groovy | 3 +- .../griffon-app/lifecycle/Initialize.groovy | 7 +--- .../griffon-app/resources/default-issue.css | 2 -- .../griffon-app/resources/log4j.properties | 9 +++++ pit-swing/lib/slf4j-api-1.6.0.jar | Bin 0 -> 25496 bytes pit-swing/lib/slf4j-log4j12-1.6.0.jar | Bin 0 -> 9750 bytes version.properties | 2 +- 10 files changed, 38 insertions(+), 23 deletions(-) create mode 100644 pit-swing/griffon-app/conf/Events.groovy create mode 100644 pit-swing/griffon-app/resources/log4j.properties create mode 100644 pit-swing/lib/slf4j-api-1.6.0.jar create mode 100644 pit-swing/lib/slf4j-log4j12-1.6.0.jar diff --git a/pit-swing/application.properties b/pit-swing/application.properties index 71e1341..d0ddff0 100644 --- a/pit-swing/application.properties +++ b/pit-swing/application.properties @@ -2,4 +2,4 @@ #Thu May 27 05:01:16 CDT 2010 app.griffon.version=0.3 app.name=pit-swing -app.version=2.4.0 +app.version=2.5.0 diff --git a/pit-swing/griffon-app/conf/Events.groovy b/pit-swing/griffon-app/conf/Events.groovy new file mode 100644 index 0000000..d2dbc49 --- /dev/null +++ b/pit-swing/griffon-app/conf/Events.groovy @@ -0,0 +1,5 @@ +import org.slf4j.LoggerFactory + +onNewInstance = { klass, type, instance -> + instance.metaClass.logger = LoggerFactory.getLogger(klass.name) +} diff --git a/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy b/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy index dd26d66..114d032 100644 --- a/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy +++ b/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy @@ -17,49 +17,56 @@ class PITController { model.issueListRenderer = new IssueTableCellRenderer() File pitHome, pitrcFile, pitswingrcFile + boolean logDbg = logger.isDebugEnabled() Properties config = new Properties() // look for config directory pitHome = new File(System.getProperty('user.home'), '.pit') - println "$pitHome is ${pitHome.exists() ? '' : 'not '} present." + if (logDbg) logger.debug("$pitHome is " + + (pitHome.exists() ? '' : 'not ') + "present.") // look for general config options pitrcFile = new File(pitHome, 'pitrc') - println "$pitrcFile is ${pitrcFile.exists() ? '' : 'not '} present." + if(logDbg) logger.debug("$pitrcFile is " + + (pitrcFile.exists() ? '' : 'not ') + "present.") // load general config (if present) if (pitrcFile.exists()) { pitrcFile.withInputStream() { config.load(it) } - println "Loaded pitrc" + if (logDbg) logger.debug("Loaded pitrc") } // look for swing specific config pitswingrcFile = new File(pitHome, 'pitswingrc') - println "$pitswingrcFile is " (pitswingrcFile.exists() ? - '' : 'not ') + "present." + if (logDbg) logger.debug("$pitswingrcFile is " + + (pitswingrcFile.exists() ? '' : 'not ') + "present.") // load swing specific config (if present) if (pitswingrcFile.exists()) { pitswingrcFile.withInputStream() { config.load(it) } - println "Loaded pitswingrc" + if(logDbg) logger.debug("Loaded pitswingrc") } // Process Configurable Options // ---------------------------- - config.keySet().each { println it } + if (logDbg) { + logger.debug("Configurable properties:") + config.keySet().each { logger.debug(it) } + } // add custom category templates Category.values().each { category -> def expectedKey = "issue." + category.name().toLowerCase() + ".template" - println "Looking for key: $expectedKey" + if(logDbg) logger.debug("Looking for key: $expectedKey") + config.keySet().each { currentKey -> if (currentKey == expectedKey) model.templates[(category)] = config.getProperty(expectedKey, "") - println "Template for category $category: '" + - model.templates[(category)] + "'" + if (logDbg) logger.debug("Template for category $category: '" + + model.templates[(category)] + "'") } } @@ -71,7 +78,7 @@ class PITController { def initRepos = config.getProperty('initial-repositories', '') initRepos = initRepos.split(/[;:,]/) initRepos.each { repoPath -> loadProject(new File(repoPath)) } - println "Init repos: '$initRepos'" + if(logDbg) logger.debug("Init repos: '$initRepos'") } // load custom issue CSS @@ -88,7 +95,7 @@ class PITController { (cssFile = new File(issueCSS).exists())) issueCSS = cssFile.text - println "CS for issue display: $issueCSS" + if (logDbg) logger.debug("CS for issue display: $issueCSS") model.issueCSS = issueCSS } diff --git a/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy b/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy index 714949c..3403380 100644 --- a/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy +++ b/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy @@ -213,7 +213,8 @@ class ProjectPanelController { result.append(line) // add in the CSS information to the head - if (line =~//) result.append(model.issueCSS) + if (line =~//) result.append('') } return result.toString() diff --git a/pit-swing/griffon-app/lifecycle/Initialize.groovy b/pit-swing/griffon-app/lifecycle/Initialize.groovy index 0a46b4f..e0d78bd 100644 --- a/pit-swing/griffon-app/lifecycle/Initialize.groovy +++ b/pit-swing/griffon-app/lifecycle/Initialize.groovy @@ -22,13 +22,8 @@ import griffon.util.GriffonPlatformHelper import griffon.util.GriffonApplicationHelper GriffonPlatformHelper.tweakForNativePlatform(app) -SwingBuilder.lookAndFeel('mac', 'org.pushingpixels.substance.api.skin.SubstanceCremeCoffeeLookAndFeel', 'nimbus', ['metal', [boldFonts: false]]) +SwingBuilder.lookAndFeel('org.pushingpixels.substance.api.skin.SubstanceCremeCoffeeLookAndFeel', 'nimbus', ['metal', [boldFonts: false]]) // make config directory def confDir = new File(System.getProperty('user.home'), '.pit') if (!confDir.exists()) confDir.mkdirs() -// find or create configuration file -def swingConf = new File(confDir, 'pit-swing.groovy') -if (!swingConf.exists()) swingConf.createNewFile() -// run config -GriffonApplicationHelper.runScriptInsideEDT(swingConf.canonicalPath, app) diff --git a/pit-swing/griffon-app/resources/default-issue.css b/pit-swing/griffon-app/resources/default-issue.css index fe8ad75..69bbaa0 100644 --- a/pit-swing/griffon-app/resources/default-issue.css +++ b/pit-swing/griffon-app/resources/default-issue.css @@ -1,4 +1,3 @@ - diff --git a/pit-swing/griffon-app/resources/log4j.properties b/pit-swing/griffon-app/resources/log4j.properties new file mode 100644 index 0000000..52687fe --- /dev/null +++ b/pit-swing/griffon-app/resources/log4j.properties @@ -0,0 +1,9 @@ +log4j.rootLogger=DEBUG,stdout,fileout + +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout + +log4j.appender.fileout=org.apache.log4j.FileAppender +log4j.appender.fileout.file=pit-swing.log +log4j.appender.fileout.layout=org.apache.log4j.PatternLayout +log4j.appender.fileout.layout.ConversionPattern=%-5p %C %d{DATE}: %m%n diff --git a/pit-swing/lib/slf4j-api-1.6.0.jar b/pit-swing/lib/slf4j-api-1.6.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..db92f9a7421fb87bdfafebc77bb3098468659733 GIT binary patch literal 25496 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 literal 0 HcmV?d00001 diff --git a/pit-swing/lib/slf4j-log4j12-1.6.0.jar b/pit-swing/lib/slf4j-log4j12-1.6.0.jar new file mode 100644 index 0000000000000000000000000000000000000000..42cca51aad8098d27c9a4a620b06d65cf0792345 GIT binary patch literal 9750 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