You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@avalon.apache.org by Jeremias Maerki <je...@outline.ch> on 2002/01/11 09:35:38 UTC

Re: [repost] Configuring LogKit for ExcaliburComponentManager ?

Hi Vincent

I do it this way (and I am really happy with it):

org.apache.log.Logger rootLogger =
        org.apache.log.Hierarchy.getDefaultHierarchy().getLoggerFor("MyApp");

MyApp main = new MyApp(args[0]);
main.setLogger(rootLogger);
main.initialize();

(later...)

DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
Configuration cfg = cfgBuilder.buildFromFile(cfgFile);

getLogger().setPriority(org.apache.log.Priority.getPriorityForName(cfg.getAttribute("log", "INFO")));

//Log Manager
this.logmanager = new DefaultLogKitManager();
setupLogger(logmanager, "logmanager");
((Configurable)logmanager).configure(cfg.getChild("logkit"));

//Configuration
this.manager = new ExcaliburComponentManager();
this.manager.setLogger(logmanager.getLogger("environment"));
this.manager.setLogKitManager(logmanager);
this.manager.configure(cfg.getChild("environment"));
this.manager.initialize();

The config file looks approximately like this:
<config log="INFO">
    <logkit>
        <factories>
            <factory type="stream" class="org.apache.avalon.excalibur.logger.factory.StreamTargetFactory"/>
            <factory type="file" class="org.apache.avalon.excalibur.logger.factory.FileTargetFactory"/>
            <factory type="priority-filter" class="org.apache.avalon.excalibur.logger.factory.PriorityFilterTargetFactory"/>
        </factories>
        <targets>
            <stream id="console">
                <stream>System.out</stream>
                <format type="avalon">%19.19{time:yyyy-MM-dd'T'HH:mm:ss.SSS} %5.5{priority}[%-15.15{category}]: %{message}\n%{throwable}</format>
            </stream>
        </targets>
        <categories>
            <category name="environment" log-level="INFO">
                <log-target id-ref="console"/>
            </category>
            <category name="XML" log-level="DEBUG">
                <log-target id-ref="console"/>
                <category name="XPath" log-level="DEBUG">
                    <log-target id-ref="console"/>
                </category>
            </category>
        </categories>
    </logkit>
    <components>
        <component role="com.outline.util.vfs.VFSManager" class="com.outline.util.vfs.DefaultVFSManager">
            <vfs name="test" class="com.outline.util.vfs.os.OSFileSystem">
                <root>../../test</root>
            </vfs>
        </component>
        <component role="com.outline.outputcenter.util.JNDIProviderSelector" class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector">
            <component-instance name="default" class="com.outline.outputcenter.util.DefaultJNDIProvider" logger="JNDI"/>
            <component-instance name="jboss" class="com.outline.outputcenter.util.DefaultJNDIProvider" logger="JNDI">
                <java.naming.factory.initial>org.jnp.interfaces.NamingContextFactory</java.naming.factory.initial>
                <java.naming.provider.url>localhost</java.naming.provider.url>
                <java.naming.factory.url.pkgs>org.jboss.naming</java.naming.factory.url.pkgs>
            </component-instance>
        </component>
        <!-- more config... -->
    </components>
</config>

Of course, I also have the chicken/egg problem until the logmanager has
been started, but I can live with that since until this instant nothing
important happens anyway.


On Fri, 11 Jan 2002 08:17:58 -0000 Vincent Massol wrote:
> Hi,
> 
> I'm using ExcaliburComponentManager to manage my components. It needs a
> LogKit logger to work. I am using something like :
> 
> manager.setLogger(Hierarchy.getDefaultHierarchy().getLoggerFor("systemCo
> nfig"));
> 
> This works fine. However, the logs are printed on the console and I
> would like to know how to configure it with other
> appender/filters/format etc. I would like this configuration to be
> externalized in a configuration file (same a log4j.properties or
> log4j.xml one for Log4j).
> 
> It is my understanding that logkit does not provide a configuration file
> abstraction, is that right ? It is also my understanding that there is
> an excalibur DefaultLogKitManager component that does this, is that
> correct ?
> 
> Looking at the source code for DefaultLogKitManager, I can see that :
> * it is itself a component. So I'll have to manually initialize it as
> there is no component manager at this stage,
> * it itself needs a LogKit logger to work ... This is the chicken and
> egg problem.
> 
> What is the recommended way to do this ? Can someone provide some
> pointers to me ?
> 
> Thanks
> -Vincent

Cheers,
Jeremias Märki

mailto:jeremias.maerki@outline.ch

OUTLINE AG
Postfach 3954 - Rhynauerstr. 15 - CH-6002 Luzern
Fon +41 (41) 317 2020 - Fax +41 (41) 317 2029
Internet http://www.outline.ch


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


RE: [repost] Configuring LogKit for ExcaliburComponentManager ?

Posted by Vincent Massol <vm...@octo.com>.
Thanks Jeremias. I'll try what you suggest which looks fine.
Cheers,
-Vincent

> -----Original Message-----
> From: Jeremias Maerki [mailto:jeremias.maerki@outline.ch]
> Sent: 11 January 2002 08:36
> To: Avalon Developers List
> Subject: Re: [repost] Configuring LogKit for ExcaliburComponentManager
?
> 
> Hi Vincent
> 
> I do it this way (and I am really happy with it):
> 
> org.apache.log.Logger rootLogger =
> 
> org.apache.log.Hierarchy.getDefaultHierarchy().getLoggerFor("MyApp");
> 
> MyApp main = new MyApp(args[0]);
> main.setLogger(rootLogger);
> main.initialize();
> 
> (later...)
> 
> DefaultConfigurationBuilder cfgBuilder = new
> DefaultConfigurationBuilder();
> Configuration cfg = cfgBuilder.buildFromFile(cfgFile);
> 
>
getLogger().setPriority(org.apache.log.Priority.getPriorityForName(cfg.g
et
> Attribute("log", "INFO")));
> 
> //Log Manager
> this.logmanager = new DefaultLogKitManager();
> setupLogger(logmanager, "logmanager");
> ((Configurable)logmanager).configure(cfg.getChild("logkit"));
> 
> //Configuration
> this.manager = new ExcaliburComponentManager();
> this.manager.setLogger(logmanager.getLogger("environment"));
> this.manager.setLogKitManager(logmanager);
> this.manager.configure(cfg.getChild("environment"));
> this.manager.initialize();
> 
> The config file looks approximately like this:
> <config log="INFO">
>     <logkit>
>         <factories>
>             <factory type="stream"
>
class="org.apache.avalon.excalibur.logger.factory.StreamTargetFactory"/>
>             <factory type="file"
> class="org.apache.avalon.excalibur.logger.factory.FileTargetFactory"/>
>             <factory type="priority-filter"
>
class="org.apache.avalon.excalibur.logger.factory.PriorityFilterTargetFa
ct
> ory"/>
>         </factories>
>         <targets>
>             <stream id="console">
>                 <stream>System.out</stream>
>                 <format type="avalon">%19.19{time:yyyy-MM-
> dd'T'HH:mm:ss.SSS} %5.5{priority}[%-15.15{category}]:
> %{message}\n%{throwable}</format>
>             </stream>
>         </targets>
>         <categories>
>             <category name="environment" log-level="INFO">
>                 <log-target id-ref="console"/>
>             </category>
>             <category name="XML" log-level="DEBUG">
>                 <log-target id-ref="console"/>
>                 <category name="XPath" log-level="DEBUG">
>                     <log-target id-ref="console"/>
>                 </category>
>             </category>
>         </categories>
>     </logkit>
>     <components>
>         <component role="com.outline.util.vfs.VFSManager"
> class="com.outline.util.vfs.DefaultVFSManager">
>             <vfs name="test"
class="com.outline.util.vfs.os.OSFileSystem">
>                 <root>../../test</root>
>             </vfs>
>         </component>
>         <component
> role="com.outline.outputcenter.util.JNDIProviderSelector"
>
class="org.apache.avalon.excalibur.component.ExcaliburComponentSelector"
>
>             <component-instance name="default"
> class="com.outline.outputcenter.util.DefaultJNDIProvider"
logger="JNDI"/>
>             <component-instance name="jboss"
> class="com.outline.outputcenter.util.DefaultJNDIProvider"
logger="JNDI">
> 
>
<java.naming.factory.initial>org.jnp.interfaces.NamingContextFactory</ja
va
> .naming.factory.initial>
> 
> <java.naming.provider.url>localhost</java.naming.provider.url>
> 
>
<java.naming.factory.url.pkgs>org.jboss.naming</java.naming.factory.url.
pk
> gs>
>             </component-instance>
>         </component>
>         <!-- more config... -->
>     </components>
> </config>
> 
> Of course, I also have the chicken/egg problem until the logmanager
has
> been started, but I can live with that since until this instant
nothing
> important happens anyway.
> 
> 
> On Fri, 11 Jan 2002 08:17:58 -0000 Vincent Massol wrote:
> > Hi,
> >
> > I'm using ExcaliburComponentManager to manage my components. It
needs a
> > LogKit logger to work. I am using something like :
> >
> >
manager.setLogger(Hierarchy.getDefaultHierarchy().getLoggerFor("systemCo
> > nfig"));
> >
> > This works fine. However, the logs are printed on the console and I
> > would like to know how to configure it with other
> > appender/filters/format etc. I would like this configuration to be
> > externalized in a configuration file (same a log4j.properties or
> > log4j.xml one for Log4j).
> >
> > It is my understanding that logkit does not provide a configuration
file
> > abstraction, is that right ? It is also my understanding that there
is
> > an excalibur DefaultLogKitManager component that does this, is that
> > correct ?
> >
> > Looking at the source code for DefaultLogKitManager, I can see that
:
> > * it is itself a component. So I'll have to manually initialize it
as
> > there is no component manager at this stage,
> > * it itself needs a LogKit logger to work ... This is the chicken
and
> > egg problem.
> >
> > What is the recommended way to do this ? Can someone provide some
> > pointers to me ?
> >
> > Thanks
> > -Vincent
> 
> Cheers,
> Jeremias Märki
> 
> mailto:jeremias.maerki@outline.ch
> 
> OUTLINE AG
> Postfach 3954 - Rhynauerstr. 15 - CH-6002 Luzern
> Fon +41 (41) 317 2020 - Fax +41 (41) 317 2029
> Internet http://www.outline.ch
> 
> 
> --
> To unsubscribe, e-mail:   <mailto:avalon-dev-
> unsubscribe@jakarta.apache.org>
> For additional commands, e-mail: <mailto:avalon-dev-
> help@jakarta.apache.org>
> 




--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>