|  | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | 
|  | <!-- | 
|  | Licensed to the Apache Software Foundation (ASF) under one or more | 
|  | contributor license agreements.  See the NOTICE file distributed with | 
|  | this work for additional information regarding copyright ownership. | 
|  | The ASF licenses this file to You under the Apache License, Version 2.0 | 
|  | (the "License"); you may not use this file except in compliance with | 
|  | the License.  You may obtain a copy of the License at | 
|  |  | 
|  | http://www.apache.org/licenses/LICENSE-2.0 | 
|  |  | 
|  | Unless required by applicable law or agreed to in writing, software | 
|  | distributed under the License is distributed on an "AS IS" BASIS, | 
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | See the License for the specific language governing permissions and | 
|  | limitations under the License. | 
|  | --> | 
|  | <!-- Generated by Apache Maven Doxia at Jul 29, 2014 --> | 
|  | <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | 
|  | <head> | 
|  | <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> | 
|  | <title> | 
|  | Extending Log4j 2 Configuration - Apache Log4j 2</title> | 
|  | <link rel="stylesheet" href="../css/bootstrap.min.css" type="text/css" /> | 
|  | <link rel="stylesheet" href="../css/site.css" type="text/css" /> | 
|  | <script type="text/javascript" src="../js/jquery.min.js"></script> | 
|  | <script type="text/javascript" src="../js/bootstrap.min.js"></script> | 
|  | <script type="text/javascript" src="../js/prettify.min.js"></script> | 
|  | <script type="text/javascript" src="../js/site.js"></script> | 
|  | <meta name="author" content="Ralph Goers" /> | 
|  | <meta name="Date-Revision-yyyymmdd" content="20140729" /> | 
|  | <meta http-equiv="Content-Language" content="en" /> | 
|  |  | 
|  | </head> | 
|  | <body class="composite"> | 
|  | <img class="logo-left" src="../images/ls-logo.jpg" alt="Apache logging services logo" /> | 
|  | <img class="logo-right" src="../images/logo.jpg" alt="Apache log4j logo" /> | 
|  | <div class="clear"></div> | 
|  |  | 
|  | <div class="navbar"> | 
|  | <div class="navbar-inner"> | 
|  | <div class="container-fluid"> | 
|  | <a class="brand" href="http://logging.apache.org/log4j/2.x/">Apache Log4j 2 ™</a> | 
|  | <ul class="nav"> | 
|  | <li> | 
|  |  | 
|  |  | 
|  | <a href="http://wiki.apache.org/logging" class="external" target="_blank" title="Logging Wiki">Logging Wiki</a> | 
|  | </li> | 
|  | <li> | 
|  |  | 
|  |  | 
|  | <a href="http://www.apache.org/" class="external" target="_blank" title="Apache">Apache</a> | 
|  | </li> | 
|  | <li> | 
|  | <a href="../../../" title="Logging Services">Logging Services</a> | 
|  | </li> | 
|  | <li> | 
|  |  | 
|  |  | 
|  | <a href="https://analysis.apache.org/dashboard/index/org.apache.logging.log4j:log4j" class="external" target="_blank" title="Sonar">Sonar</a> | 
|  | </li> | 
|  | </ul> | 
|  | </div> | 
|  | </div> | 
|  | </div> | 
|  |  | 
|  | <div class="container-fluid"> | 
|  | <table class="layout-table"> | 
|  | <tr> | 
|  | <td class="sidebar"> | 
|  | <div class="well sidebar-nav"> | 
|  | <ul class="nav nav-list"> | 
|  | <li class="nav-header"><i class="icon-home"></i>Apache Log4j™ 2</li> | 
|  | <li class="none"> | 
|  | <a href="../index.html" title="About">About</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../download.html" title="Download">Download</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../maven-artifacts.html" title="Maven and Ivy">Maven and Ivy</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../build.html" title="Build">Build</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../guidelines.html" title="Guidelines">Guidelines</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../javastyle.html" title="Style Guide">Style Guide</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../changelog.html" title="Changelog">Changelog</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../javadoc.html" title="Javadoc">Javadoc</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../faq.html" title="FAQ">FAQ</a> | 
|  | </li> | 
|  | </ul> | 
|  | <ul class="nav nav-list"> | 
|  | <li class="nav-header"><i class="icon-book"></i>Manual</li> | 
|  | <li class="none"> | 
|  | <a href="../manual/index.html" title="Introduction">Introduction</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../manual/architecture.html" title="Architecture">Architecture</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../manual/migration.html" title="Log4j 1.x Migration">Log4j 1.x Migration</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/api.html" title="API">API</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/configuration.html" title="Configuration">Configuration</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/webapp.html" title="Web Applications and JSPs">Web Applications and JSPs</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/plugins.html" title="Plugins">Plugins</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/lookups.html" title="Lookups">Lookups</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/appenders.html" title="Appenders">Appenders</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/layouts.html" title="Layouts">Layouts</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/filters.html" title="Filters">Filters</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/async.html" title="Async Loggers">Async Loggers</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../manual/jmx.html" title="JMX">JMX</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../manual/logsep.html" title="Logging Separation">Logging Separation</a> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/extending.html" title="Extending Log4j">Extending Log4j</a> | 
|  | </li> | 
|  | <li class="expanded active"> | 
|  | <a href="../manual/customconfig.html" title="Extending Log4j Configuration">Extending Log4j Configuration</a> | 
|  | <ul> | 
|  | <li class="none"> | 
|  | <a href="../manual/custom.config#ConfigurationFactory" title="ConfigurationFactory">ConfigurationFactory</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../manual/custom.config#AddingToCurrent" title="Manual">Manual</a> | 
|  | </li> | 
|  | </ul> | 
|  | </li> | 
|  | <li class="collapsed"> | 
|  | <a href="../manual/customloglevels.html" title="Custom Log Levels">Custom Log Levels</a> | 
|  | </li> | 
|  | </ul> | 
|  | <ul class="nav nav-list"> | 
|  | <li class="nav-header"><i class="icon-cog"></i>Components</li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-api/index.html" title="API">API</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-core/index.html" title="Implementation">Implementation</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-jcl/index.html" title="Commons Logging Bridge">Commons Logging Bridge</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-1.2-api/index.html" title="Log4j 1.2 API">Log4j 1.2 API</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-slf4j-impl/index.html" title="SLF4J Binding">SLF4J Binding</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-to-slf4j/index.html" title="Log4j 2 to SLF4J Adapter">Log4j 2 to SLF4J Adapter</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-flume-ng/index.html" title="Apache Flume NG Appender">Apache Flume NG Appender</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-taglib/index.html" title="Log4j Tag Library">Log4j Tag Library</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-jmx-gui/index.html" title="Log4j JMX GUI">Log4j JMX GUI</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-web/index.html" title="Log4j Web Application Support">Log4j Web Application Support</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../log4j-nosql/index.html" title="Log4j NoSQL support">Log4j NoSQL support</a> | 
|  | </li> | 
|  | </ul> | 
|  | <ul class="nav nav-list"> | 
|  | <li class="nav-header"><i class="icon-info-sign"></i>Project Information</li> | 
|  | <li class="none"> | 
|  | <a href="../dependencies.html" title="Dependencies">Dependencies</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../dependency-convergence.html" title="Dependency Convergence">Dependency Convergence</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../dependency-management.html" title="Dependency Management">Dependency Management</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../team-list.html" title="Project Team">Project Team</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../mail-lists.html" title="Mailing Lists">Mailing Lists</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../issue-tracking.html" title="Issue Tracking">Issue Tracking</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../license.html" title="Project License">Project License</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../source-repository.html" title="Source Repository">Source Repository</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../project-summary.html" title="Project Summary">Project Summary</a> | 
|  | </li> | 
|  | </ul> | 
|  | <ul class="nav nav-list"> | 
|  | <li class="nav-header"><i class="icon-cog"></i>Project Reports</li> | 
|  | <li class="none"> | 
|  | <a href="../changes-report.html" title="Changes Report">Changes Report</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../jira-report.html" title="JIRA Report">JIRA Report</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../surefire-report.html" title="Surefire Report">Surefire Report</a> | 
|  | </li> | 
|  | <li class="none"> | 
|  | <a href="../rat-report.html" title="RAT Report">RAT Report</a> | 
|  | </li> | 
|  | </ul> | 
|  | </div> | 
|  | <div id="poweredBy"> | 
|  | <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"> | 
|  | <img class="poweredBy" alt="Built by Maven" src="../images/maven-feather.png" /> | 
|  | </a> | 
|  | </div> | 
|  | </td> | 
|  | <td class="content"> | 
|  | <!-- Licensed to the Apache Software Foundation (ASF) under one or more | 
|  | contributor license agreements.  See the NOTICE file distributed with | 
|  | this work for additional information regarding copyright ownership. | 
|  | The ASF licenses this file to You under the Apache License, Version 2.0 | 
|  | (the "License"); you may not use this file except in compliance with | 
|  | the License.  You may obtain a copy of the License at | 
|  |  | 
|  | http://www.apache.org/licenses/LICENSE-2.0 | 
|  |  | 
|  | Unless required by applicable law or agreed to in writing, software | 
|  | distributed under the License is distributed on an "AS IS" BASIS, | 
|  | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | See the License for the specific language governing permissions and | 
|  | limitations under the License. --> | 
|  |  | 
|  | <div class="section"><h2>Custom Configurations<a name="Custom_Configurations"></a></h2> | 
|  | <p> | 
|  | Log4j 2 provides a few ways for applications to create their own custom configurations. | 
|  | </p> | 
|  | <a name="ConfigurationFactory"></a> | 
|  | <div class="section"><h3>Add a New Configuration via ConfigurationFactory<a name="Add_a_New_Configuration_via_ConfigurationFactory"></a></h3> | 
|  | <p> | 
|  | The easiest way to create a custom Configuration is to extend one of the standard Configuration classes | 
|  | (XMLConfiguration, JSONConfiguration) and then create a new ConfigurationFactory for the extended class. | 
|  | After the standard configuration completes the custom configuration can be added to it. | 
|  | </p> | 
|  | <p> | 
|  | The example below shows how to extend XMLConfiguration to manually add an Appender and a LoggerConfig | 
|  | to the configuration. | 
|  | </p> | 
|  | <div class="prettyprint linenums"><pre> | 
|  | @Plugin(name = "MyXMLConfigurationFactory", category = "ConfigurationFactory") | 
|  | @Order(10) | 
|  | public class MyXMLConfigurationFactory extends ConfigurationFactory { | 
|  |  | 
|  | /** | 
|  | * Valid file extensions for XML files. | 
|  | */ | 
|  | public static final String[] SUFFIXES = new String[] {".xml", "*"}; | 
|  |  | 
|  | /** | 
|  | * Return the Configuration. | 
|  | * @param source The InputSource. | 
|  | * @return The Configuration. | 
|  | */ | 
|  | public Configuration getConfiguration(InputSource source) { | 
|  | return new MyXMLConfiguration(source, configFile); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * Returns the file suffixes for XML files. | 
|  | * @return An array of File extensions. | 
|  | */ | 
|  | public String[] getSupportedTypes() { | 
|  | return SUFFIXES; | 
|  | } | 
|  | } | 
|  |  | 
|  | public class MyXMLConfiguration extends XMLConfiguration { | 
|  | public MyXMLConfiguration(final ConfigurationFactory.ConfigurationSource configSource) { | 
|  | super(configSource); | 
|  | } | 
|  |  | 
|  | @Override | 
|  | protected void doConfigure() { | 
|  | super.doConfigure(); | 
|  | final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); | 
|  | final Layout layout = PatternLayout.createLayout(PatternLayout.SIMPLE_CONVERSION_PATTERN, config, null, | 
|  | null,null, null); | 
|  | final Appender appender = FileAppender.createAppender("target/test.log", "false", "false", "File", "true", | 
|  | "false", "false", "4000", layout, null, "false", null, config); | 
|  | appender.start(); | 
|  | addAppender(appender); | 
|  | LoggerConfig loggerConfig = LoggerConfig.createLogger("false", "info", "org.apache.logging.log4j", | 
|  | "true", refs, null, config, null ); | 
|  | loggerConfig.addAppender(appender, null, null); | 
|  | addLogger("org.apache.logging.log4j", loggerConfig); | 
|  | } | 
|  | }</pre></div> | 
|  | </div> | 
|  | <a name="AddingToCurrent"></a> | 
|  | <div class="section"><h3>Programatically Adding to the Current Configuration<a name="Programatically_Adding_to_the_Current_Configuration"></a></h3> | 
|  | <p> | 
|  | Applications sometimes have the need to customize logging separate from the actual configuration. | 
|  | Log4j allows this although it suffers from a few limitations: | 
|  | </p> | 
|  | <ol style="list-style-type: decimal"> | 
|  | <li>If the configuration file is changed the configuration will be reloaded and the manual changes | 
|  | will be lost.</li> | 
|  | <li>Modification to the running configuration requires that all the methods being called (addAppender | 
|  | and addLogger) be synchronized.</li> | 
|  | </ol> | 
|  | <p> | 
|  | As such, the recommended approach for customizing a configuration is to extend one of the standard | 
|  | Configuration classes, override the setup method to first do super.setup() and then add the custom | 
|  | Appenders, Filters and LoggerConfigs to the configuration before it is registered for use. | 
|  | </p> | 
|  | <p> | 
|  | The following example adds an Appender and a new LoggerConfig using that Appender to the current | 
|  | configuration. | 
|  | </p> | 
|  | <!-- TODO: update code example below with new plugin API --> | 
|  | <div class="prettyprint linenums"><pre> | 
|  | final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); | 
|  | final Configuration config = ctx.getConfiguration(); | 
|  | Layout layout = PatternLayout.createLayout(PatternLayout.SIMPLE_CONVERSION_PATTERN, config, null, | 
|  | null,null, null); | 
|  | Appender appender = FileAppender.createAppender("target/test.log", "false", "false", "File", "true", | 
|  | "false", "false", "4000", layout, null, "false", null, config); | 
|  | appender.start(); | 
|  | config.addAppender(appender); | 
|  | AppenderRef ref = AppenderRef.createAppenderRef("File", null, null); | 
|  | AppenderRef[] refs = new AppenderRef[] {ref}; | 
|  | LoggerConfig loggerConfig = LoggerConfig.createLogger("false", "info", "org.apache.logging.log4j", | 
|  | "true", refs, null, config, null ); | 
|  | loggerConfig.addAppender(appender, null, null); | 
|  | config.addLogger("org.apache.logging.log4j", loggerConfig); | 
|  | ctx.updateLoggers(); | 
|  | }</pre></div> | 
|  | </div> | 
|  |  | 
|  | </div> | 
|  |  | 
|  |  | 
|  |  | 
|  | </td> | 
|  | </tr> | 
|  | </table> | 
|  | </div> | 
|  |  | 
|  | <div class="footer"> | 
|  | <p>Copyright © 1999-2014 <a class="external" href="http://www.apache.org">Apache Software Foundation</a>. All Rights Reserved.</p> | 
|  | <p>Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, and the Apache Logging project logo are trademarks of The Apache Software Foundation.</p> | 
|  | <p>Site powered by <a class="external" href="http://twitter.github.com/bootstrap/">Twitter Bootstrap</a>. Icons from <a class="external" href="http://glyphicons.com/">Glyphicons Free</a>.</p> | 
|  | </div> | 
|  | </div> | 
|  | </body> | 
|  | </html> |