Return-Path: Delivered-To: apmail-incubator-jspwiki-dev-archive@minotaur.apache.org Received: (qmail 16466 invoked from network); 7 Sep 2009 20:05:29 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 7 Sep 2009 20:05:29 -0000 Received: (qmail 91400 invoked by uid 500); 7 Sep 2009 20:05:29 -0000 Delivered-To: apmail-incubator-jspwiki-dev-archive@incubator.apache.org Received: (qmail 91362 invoked by uid 500); 7 Sep 2009 20:05:29 -0000 Mailing-List: contact jspwiki-dev-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jspwiki-dev@incubator.apache.org Delivered-To: mailing list jspwiki-dev@incubator.apache.org Received: (qmail 91352 invoked by uid 99); 7 Sep 2009 20:05:29 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 07 Sep 2009 20:05:29 +0000 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of janne.jalkanen@ecyrd.com designates 193.64.5.122 as permitted sender) Received: from [193.64.5.122] (HELO mail.ecyrd.com) (193.64.5.122) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 07 Sep 2009 20:05:18 +0000 Received: from [192.168.0.14] (cs181005170.pp.htv.fi [82.181.5.170]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by mail.ecyrd.com (Postfix) with ESMTPSA id 32F7C97C257 for ; Mon, 7 Sep 2009 23:04:39 +0300 (EEST) Message-Id: <3C1E0D51-2B55-40FC-B1E5-64E1746772E3@ecyrd.com> From: Janne Jalkanen To: jspwiki-dev@incubator.apache.org In-Reply-To: <3a6c97f00909071155x76cedab7n29156a4463d201b9@mail.gmail.com> Content-Type: text/plain; charset=US-ASCII; format=flowed; delsp=yes Content-Transfer-Encoding: 7bit Mime-Version: 1.0 (Apple Message framework v936) Subject: Re: Restart logging? Date: Mon, 7 Sep 2009 23:04:35 +0300 References: <3a6c97f00909060945o2864cf4fu59af20916475114d@mail.gmail.com> <9FA0E913-49E8-40EA-A8C3-827E0A825BC2@ecyrd.com> <3a6c97f00909071155x76cedab7n29156a4463d201b9@mail.gmail.com> X-Mailer: Apple Mail (2.936) X-Virus-Checked: Checked by ClamAV on apache.org I'm not sure anybody thinks that slf4j was a bad idea :-). I think Andrew's solution below is ok (though we might want to use Reflection to find the PropertyConfigurator). It's good enough for first-use experience certainly, since we ship with log4j enabled by default. Besides, since Install.jsp only knows how to configure log4j, we don't need this functionality for anyone else either. Also, I think some log libs know how to reload themselves if you change the config file. /Janne On 7 Sep 2009, at 21:55, Harry Metske wrote: > Andrew, > see https://issues.apache.org/jira/browse/JSPWIKI-376 > > We have implemented slf4j to abstract away from specific logging > implementations. > PropertyConfigurator is a log4j specific class, if you would > directly use > that class as coded below, you would revert all the effort done in > JSPWIKI-376 and we would rely again on log4j. > What you should at least do is first check if log4j is on the > classpath and > then use reflection to get to the PropertyConfigurator. If there is > no log4j > on the classpath we should disappoint the user by saying "sorry, no > log4j > present, we can't do reconfigure logging right now". > LoggerFactory.registerLoggerMBean does a similar classpath-check/ > reflection > trick. > If we all think that slf4j abstraction wasn't a good idea because we > have > thrown away all the log4j-specific goodies, we should get rid of slf4j > again, thereby reverting JSPWIKI-376. (vote ?) > > A sort of meet in the middle might be to only change the > log4j.properties > file, and require a webapp reload for the "logging restart" to work. > > regards, > Harry > > 2009/9/7 Andrew Jaquith > >> Ok, I figured it out. Google is my friend. I simply added this to the >> [new] WikiEngine.restart() method: >> >> LogManager.resetConfiguration(); >> ClassLoader cl = this.getClass().getClassLoader(); >> URL log4jprops = cl.getResource( "log4j.properties" ); >> if (log4jprops != null) >> PropertyConfigurator.configure(log4jprops); >> >> ...and that's all it took. I'll check this in soon. >> >> Hat-tip goes to Alan Green at bright-green.com. :) >> >> Now, this might not work if somebody swaps out their logging >> configuration, so we might want to add in some safeguards to see if >> Log4j is actually being used. But to Janne's point, this is about the >> first-use experience. Which has now improved dramatically. :) >> >> Andrew >> >> On Mon, Sep 7, 2009 at 5:43 AM, Dalen, Andre >> van wrote: >>> >>>> Another possibility is to switch to Simple logging, which always >>>> goes >>> >>>> to stdout - in Tomcat's case, catalina.out. Then there would be no >>>> need to provide configuration on Install.jsp, which would >>>> simplify our >>> >>>> install process even more. >>> >>> Such simple logging would not give enough control on resource use. >>> It would be better imho to switch to log4j instead. >>> >>> Eventually a reload is shorthand for the sequence shutdown, startup. >>> Logging libraries should give their user control over when the >>> shutdown >>> happens >>> exactly, so I would assume a reload won't be a problem if >>> implemented >>> as a shutdown of the logging subsystem followed by a startup. >>> >>> regards, Andre >>> >>> -----Original Message----- >>> From: Janne Jalkanen [mailto:janne.jalkanen@ecyrd.com] >>> Sent: maandag 7 september 2009 8:26 >>> To: jspwiki-dev@incubator.apache.org >>> Subject: Re: Restart logging? >>> >>> >>> I don't think there's a simple way to do that through slf4j, simply >>> because log configuration is very specific to the actual logging >>> library used. For example, java.util.logging has a single global >>> LogManager, and to restart that one would mean writing our own >>> ClassLoader... >>> >>> However, since this is about first-use experience, it's unlikely >>> that >>> someone would both be savvy enough to first switch the logging >>> library >>> - THEN go and apply the easy-install process. So we might get away >>> simply by reconfiguring whichever logging library we happen to be >>> shipping with. >>> >>> Another possibility is to switch to Simple logging, which always >>> goes >>> to stdout - in Tomcat's case, catalina.out. Then there would be no >>> need to provide configuration on Install.jsp, which would simplify >>> our >>> install process even more. >>> >>> /Janne >>> >>> On 7 Sep 2009, at 00:52, Andrew Jaquith wrote: >>> >>>> Hi Harry, >>>> >>>> The idea is to configure the wiki, including logging settings, >>>> using >>>> the installer screen. Then, after pressing the "Configure!" button, >>>> presto! the wiki is configured the way it should be without >>>> needing to >>>> restart the webapp. Instant gratification! It is much better than >>>> having to restart the webapp. >>>> >>>> Right now, in my local builds, everything *except* the log file >>>> change >>>> seems to work fine. The goal is to have the desired log file >>>> location >>>> (configured via the installer) reflected immediately -- the logs >>>> start >>>> going to that file. So I want to know how best to do that. >>>> Whether it >>>> is JMX or whatever, I don't care. But I am not a logging expert; >>>> hence >>>> the broadcast. If you have ideas I'd like to hear about them. >>>> >>>> Andrew >>>> >>>> On Sun, Sep 6, 2009 at 12:45 PM, Harry >>>> Metske wrote: >>>>> Well, >>>>> >>>>> we have our own logging layer (org.apache.wiki.log) which talks to >>>>> slf4j >>>>> which talks to a real logging implementation (with log4j as the >>>>> default). >>>>> The first two don't have support for configuring logging at all, >>>>> the writer >>>>> of slf4j says you also shouldn't : >>>>> http://www.slf4j.org/faq.html#configure_logging >>>>> Log4j itself does support dynamic configuration of logging, but >>>>> that has >>>>> explicitly not been put in the slf4j interface. >>>>> >>>>> We do however have some way of dynamically configuring our >>>>> loggers, >>>>> and >>>>> that's through the MBeans (currently you have to use jconsole to >>>>> do >>>>> it, but >>>>> a nice GUI for it would still be nice). This is however limited. >>>>> >>>>> So with "restart logging" you could something in that direction, >>>>> but again, >>>>> that is limited to log4j, if you run another logging >>>>> implementation, you are >>>>> left alone in the dark. >>>>> >>>>> BTW, what exactly would be the difference between restarting the >>>>> engine and >>>>> reloading the whole webapp ? >>>>> >>>>> regards, >>>>> Harry >>>>> >>>>> 2009/9/6 Andrew Jaquith >>>>> >>>>>> Hi all -- >>>>>> >>>>>> I am doing a bunch of work on the installer/config code. I've >>>>>> already >>>>>> got some really cool features implemented (LDAP config and live >>>>>> testing, Stripesification of the interface, configuration of >>>>>> multiple >>>>>> properties files simultaneously...). One thing I would REALLY >>>>>> like >>>>>> to >>>>>> do is to be able to apply changes to the wiki WITHOUT requiring a >>>>>> webapp reload. >>>>>> >>>>>> To that end, I wrote a restart() method for the WikiEngine, and >>>>>> it >>>>>> seems to work perfectly except in one respect: I can't figure out >>>>>> how >>>>>> to restart the logging subsystem. Any hints? I'd like to be >>>>>> able to >>>>>> allow the admin to specify the desired log file location, and >>>>>> after >>>>>> restart all of the logging is redirected there. >>>>>> >>>>>> Actually, there is one more thing: how does one set the Priha >>>>>> page >>>>>> directory? I'm pretty sure there's a setting in priha.properties >>>>>> that >>>>>> needs to be set, but I don't know what it is. >>>>>> >>>>>> Andrew >>>>>> >>>>> >>> >>> >>