logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bart S. (JIRA)" <j...@apache.org>
Subject [jira] [Comment Edited] (LOG4J2-952) FAQ: How do I configure log4j2 programmatically in code without a configuration file?
Date Thu, 13 Aug 2015 14:33:46 GMT

    [ https://issues.apache.org/jira/browse/LOG4J2-952?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14695305#comment-14695305
] 

Bart S. edited comment on LOG4J2-952 at 8/13/15 2:33 PM:
---------------------------------------------------------

Well, because you have to change the implementation for that so completely that you are directly
working with the resultant objects; something you are trying to avoid for reasons of the ..arduriousness
(arduousness) of having to deal with all the types/classes yourself. Something you are precisely
trying to avoid by using a Builder in this case.

The whole point of the Builder is that you won't be dealing with Filters, Appenders and LoggerConfigs
directly. So like Ralph says (and like Behrooz has made) it is a two stage process in which
the objects are first represented differently internally (like with mapping relations in the
current implementation of what Behrooz has proposed here). He turns his relations into a "spec"
and then feeds the spec to a constructor method that creates a real Configuration/LoggerContext/Appender/Filter
thing out of it.

It would not be so bad if you dealt with e.g. LoggerConfigs directly as long as you (the programmer)
doesn't have to store these in local variables and the like. So I think Ralph and Behrooz
are just correct in that they want a translation layer.


was (Author: xennex82):
Well, because you have to change the implementation for that so completely that you are directly
working with the resultant objects; something you are trying to avoid for reasons of the ..arduriousness
(arduousness) of having to deal with all the types/classes yourself. Something you are precisely
trying to avoid by using a Builder in this case.

The whole point of the Builder is that you won't be dealing with Filters, Appenders and LoggerConfigs
directly. So like Ralph says (and like Behrooz has made) it is a two stage process in which
the objects are first represented differently internally (like with mapping relations in the
current implementation of what Behrooz has proposed here). He turns his relations into a "spec"
and then feeds the spec to a constructor method that creates a real Configuration/LoggerContext/Appender/Filter
thing out of it.

> FAQ: How do I configure log4j2 programmatically in code without a configuration file?
> -------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-952
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-952
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: API, Configurators, Documentation
>    Affects Versions: 2.1
>            Reporter: Joe Merten
>
> I found [this link|http://logging.apache.org/log4j/2.x/faq.html#config_from_code] which
said:
> {quote}
> You could use the static method #initialize(String contextName, ClassLoader loader, String
configLocation) in org.apache.logging.log4j.core.config.Configurator. (You can pass null for
the class loader.) Be aware that this class is not part of the public API so your code may
break with any minor release.
> {quote}
> This documentation is unclear because it points to a member function which needs a filename
{{configLocation}} where as the topic is ┬╗without a configuration file┬ź.
> It shoud rather point to the member function {{org.apache.logging.log4j.core.config.Configurator.initialize(ClassLoader
loader, ConfigurationSource source)}}.
> Example:
> {code:java}
> import org.apache.logging.log4j.core.config.ConfigurationSource;
> import org.apache.logging.log4j.core.config.Configurator;
> final String hardCodedXmlConfig =
>         "<?xml version='1.0' encoding='UTF-8'?>\n" +
>         "<Configuration status='INFO'>\n" +
>         "  <Appenders>\n" +
>         "    <Console name='Console' target='SYSTEM_OUT'>\n" +
>         "      <PatternLayout pattern='%d{HH:mm:ss.SSS} [%t] %-5level %logger{36}
- %msg%n'/>\n" +
>         "    </Console>\n" +
>         "  </Appenders>\n" +
>         "  <Loggers>\n" +
>         "    <Root level='debug'>\n" +
>         "      <AppenderRef ref='Console'/>\n" +
>         "    </Root>\n" +
>         "  </Loggers>\n" +
>         "</Configuration>\n";
> try {
>     Configurator.initialize(null, new ConfigurationSource(new ByteArrayInputStream(hardCodedXmlConfig.getBytes())));
> } catch (IOException e) {
>     e.printStackTrace();
> }
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Mime
View raw message