blob: a8f679e873158ecf8c7eb953a162bf1adc46d555 [file] [log] [blame]
<!DOCTYPE html>
<!--
| Generated by Apache Maven Doxia Site Renderer 1.9.1 from src/site/markdown/index.md at 2020-02-25
| Rendered using Apache Maven Fluido Skin 1.8
-->
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="generator" content="Apache Maven Doxia Site Renderer 1.9.1" />
<title>Log4j Spring Cloud Config Integration &#x2013; Log4j Spring Cloud Configuration</title>
<link rel="stylesheet" href="./css/apache-maven-fluido-1.8.min.css" />
<link rel="stylesheet" href="./css/site.css" />
<link rel="stylesheet" href="./css/print.css" media="print" />
<script src="./js/apache-maven-fluido-1.8.min.js"></script>
</head>
<body class="topBarDisabled">
<div class="container-fluid">
<header>
<div id="banner">
<div class="pull-left"><a href="http://logging.apache.org" id="bannerLeft"><img src="../../images/ls-logo.jpg" alt=""/></a></div>
<div class="pull-right"><a href="http://logging.apache.org/log4j/2.x" id="bannerRight"><img src="../../images/logo.png" alt=""/></a></div>
<div class="clear"><hr/></div>
</div>
<div id="breadcrumbs">
<ul class="breadcrumb">
<li id="publishDate">Last Published: 2020-02-25<span class="divider">|</span>
</li>
<li id="projectVersion">Version: 2.13.1</li>
<li class="pull-right"><span class="divider">|</span>
<a href="../index.html" title="Log4j">Log4j</a></li>
<li class="pull-right"><span class="divider">|</span>
<a href="http://logging.apache.org/" class="externalLink" title="Logging Services">Logging Services</a></li>
<li class="pull-right"><span class="divider">|</span>
<a href="http://www.apache.org/" class="externalLink" title="Apache">Apache</a></li>
<li class="pull-right"><span class="divider">|</span>
<a href="https://github.com/apache/logging-log4j2" class="externalLink" title="GitHub">GitHub</a></li>
<li class="pull-right"><span class="divider">|</span>
<a href="https://analysis.apache.org/dashboard/index/org.apache.logging.log4j:log4j" class="externalLink" title="Sonar">Sonar</a></li>
<li class="pull-right"><span class="divider">|</span>
<a href="https://logging.apache.org/" class="externalLink" title="Logging Services">Logging Services</a></li>
<li class="pull-right"><span class="divider">|</span>
<a href="https://www.apache.org/" class="externalLink" title="Apache">Apache</a></li>
<li class="pull-right"><a href="https://cwiki.apache.org/confluence/display/LOGGING/Log4j" class="externalLink" title="Logging Wiki">Logging Wiki</a></li>
</ul>
</div>
</header>
<div class="row-fluid">
<header id="leftColumn" class="span2">
<nav class="well sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header"><img class="imageLink" src="img/glyphicons/home.png" alt="Apache Log4j™ 2" border="0"/> Apache Log4j™ 2</li>
<li><a href="../../index.html" title="About"><span class="none"></span>About</a></li>
<li><a href="../../download.html" title="Download"><span class="none"></span>Download</a></li>
<li><a href="../../javadoc.html" title="Javadoc"><span class="icon-chevron-right"></span>Javadoc</a></li>
<li><a href="../../maven-artifacts.html" title="Maven, Ivy, Gradle Artifacts"><span class="icon-chevron-right"></span>Maven, Ivy, Gradle Artifacts</a></li>
<li><a href="../../runtime-dependencies.html" title="Runtime Dependencies"><span class="none"></span>Runtime Dependencies</a></li>
<li><a href="../../changelog.html" title="Changelog"><span class="none"></span>Changelog</a></li>
<li><a href="../../faq.html" title="FAQ"><span class="none"></span>FAQ</a></li>
<li><a href="../../performance.html" title="Performance"><span class="icon-chevron-right"></span>Performance</a></li>
<li><a href="../../articles.html" title="Articles and Tutorials"><span class="none"></span>Articles and Tutorials</a></li>
<li><a href="../../support.html" title="Support"><span class="none"></span>Support</a></li>
<li><a href="../../thanks.html" title="Thanks"><span class="none"></span>Thanks</a></li>
<li class="nav-header"><img class="imageLink" src="img/glyphicons/pencil.png" alt="For Contributors" border="0"/> For Contributors</li>
<li><a href="../../build.html" title="Building Log4j from Source"><span class="none"></span>Building Log4j from Source</a></li>
<li><a href="../../guidelines.html" title="Guidelines"><span class="none"></span>Guidelines</a></li>
<li><a href="../../javastyle.html" title="Style Guide"><span class="none"></span>Style Guide</a></li>
<li class="nav-header"><img class="imageLink" src="img/glyphicons/book.png" alt="Manual" border="0"/> Manual</li>
<li><a href="../../manual/index.html" title="Introduction"><span class="none"></span>Introduction</a></li>
<li><a href="../../manual/architecture.html" title="Architecture"><span class="none"></span>Architecture</a></li>
<li><a href="../../manual/compatibility.html" title="Log4j 1.x Compatibility"><span class="none"></span>Log4j 1.x Compatibility</a></li>
<li><a href="../../manual/migration.html" title="Log4j 1.x Migration"><span class="none"></span>Log4j 1.x Migration</a></li>
<li><a href="../../manual/api.html" title="Java API"><span class="icon-chevron-right"></span>Java API</a></li>
<li><a href="../../manual/scala-api.html" title="Scala API"><span class="none"></span>Scala API</a></li>
<li><a href="../../manual/configuration.html" title="Configuration"><span class="icon-chevron-right"></span>Configuration</a></li>
<li><a href="../../manual/usage.html" title="Usage"><span class="icon-chevron-right"></span>Usage</a></li>
<li><a href="../../manual/webapp.html" title="Web Applications and JSPs"><span class="icon-chevron-right"></span>Web Applications and JSPs</a></li>
<li><a href="../../manual/lookups.html" title="Lookups"><span class="icon-chevron-right"></span>Lookups</a></li>
<li><a href="../../manual/appenders.html" title="Appenders"><span class="icon-chevron-right"></span>Appenders</a></li>
<li><a href="../../manual/layouts.html" title="Layouts"><span class="icon-chevron-right"></span>Layouts</a></li>
<li><a href="../../manual/filters.html" title="Filters"><span class="icon-chevron-right"></span>Filters</a></li>
<li><a href="../../manual/async.html" title="Async Loggers"><span class="icon-chevron-right"></span>Async Loggers</a></li>
<li><a href="../../manual/garbagefree.html" title="Garbage-free Logging"><span class="icon-chevron-right"></span>Garbage-free Logging</a></li>
<li><a href="../../manual/jmx.html" title="JMX"><span class="none"></span>JMX</a></li>
<li><a href="../../manual/logsep.html" title="Logging Separation"><span class="none"></span>Logging Separation</a></li>
<li><a href="../../manual/extending.html" title="Extending Log4j"><span class="icon-chevron-right"></span>Extending Log4j</a></li>
<li><a href="../../manual/plugins.html" title="Plugins"><span class="icon-chevron-right"></span>Plugins</a></li>
<li><a href="../../manual/customconfig.html" title="Programmatic Log4j Configuration"><span class="icon-chevron-right"></span>Programmatic Log4j Configuration</a></li>
<li><a href="../../manual/customloglevels.html" title="Custom Log Levels"><span class="icon-chevron-right"></span>Custom Log Levels</a></li>
<li class="nav-header"><img class="imageLink" src="img/glyphicons/tag.png" alt="Related Projects" border="0"/> Related Projects</li>
<li><a href="http://logging.apache.org/log4j/scala/index.html" class="externalLink" title="Log4j-Scala"><span class="none"></span>Log4j-Scala</a></li>
<li class="nav-header"><img class="imageLink" src="img/glyphicons/link.png" alt="Legacy Sites" border="0"/> Legacy Sites</li>
<li><a href="http://logging.apache.org/log4j/1.2/" class="externalLink" title="Log4j 1.2 - End of Life"><span class="none"></span>Log4j 1.2 - End of Life</a></li>
<li><a href="http://logging.apache.org/log4j/log4j-2.3/" class="externalLink" title="Log4j 2.3 - Java 6"><span class="none"></span>Log4j 2.3 - Java 6</a></li>
<li><a href="http://logging.apache.org/log4j/log4j-2.12.1" class="externalLink" title="Log4j 2.12.1 - Java 7"><span class="none"></span>Log4j 2.12.1 - Java 7</a></li>
<li class="nav-header"><img class="imageLink" src="img/glyphicons/cog.png" alt="Components" border="0"/> Components</li>
<li><a href="../../log4j-api/index.html" title="API"><span class="none"></span>API</a></li>
<li><a href="../../log4j-core/index.html" title="Implementation"><span class="none"></span>Implementation</a></li>
<li><a href="../../log4j-jcl/index.html" title="Commons Logging Bridge"><span class="none"></span>Commons Logging Bridge</a></li>
<li><a href="../../log4j-1.2-api/index.html" title="Log4j 1.2 API"><span class="none"></span>Log4j 1.2 API</a></li>
<li><a href="../../log4j-slf4j-impl/index.html" title="SLF4J Binding"><span class="none"></span>SLF4J Binding</a></li>
<li><a href="../../log4j-jul/index.html" title="JUL Adapter"><span class="none"></span>JUL Adapter</a></li>
<li><a href="../../log4j-to-slf4j/index.html" title="Log4j 2 to SLF4J Adapter"><span class="none"></span>Log4j 2 to SLF4J Adapter</a></li>
<li><a href="../../log4j-flume-ng/index.html" title="Apache Flume Appender"><span class="none"></span>Apache Flume Appender</a></li>
<li><a href="../../log4j-taglib/index.html" title="Log4j Tag Library"><span class="none"></span>Log4j Tag Library</a></li>
<li><a href="../../log4j-jmx-gui/index.html" title="Log4j JMX GUI"><span class="none"></span>Log4j JMX GUI</a></li>
<li><a href="../../log4j-web/index.html" title="Log4j Web Application Support"><span class="none"></span>Log4j Web Application Support</a></li>
<li><a href="../../log4j-appserver/index.html" title="Log4j Application Server Integration"><span class="none"></span>Log4j Application Server Integration</a></li>
<li><a href="../../log4j-couchdb/index.html" title="Log4j CouchDB appender"><span class="none"></span>Log4j CouchDB appender</a></li>
<li><a href="../../log4j-mongodb2/index.html" title="Log4j MongoDB2 appender"><span class="none"></span>Log4j MongoDB2 appender</a></li>
<li><a href="../../log4j-mongodb3/index.html" title="Log4j MongoDB3 appender"><span class="none"></span>Log4j MongoDB3 appender</a></li>
<li><a href="../../log4j-cassandra/index.html" title="Log4j Cassandra appender"><span class="none"></span>Log4j Cassandra appender</a></li>
<li><a href="../../log4j-iostreams/index.html" title="Log4j IO Streams"><span class="none"></span>Log4j IO Streams</a></li>
<li><a href="../../log4j-liquibase/index.html" title="Log4j Liquibase Binding"><span class="none"></span>Log4j Liquibase Binding</a></li>
<li><a href="../../log4j-docker/index.html" title="Log4j Docker Support"><span class="none"></span>Log4j Docker Support</a></li>
<li><a href="../../log4j-spring-cloud-config/log4j-spring-cloud-config-client/index.html" title="Log4j Spring Cloud Config Client"><span class="none"></span>Log4j Spring Cloud Config Client</a></li>
<li class="nav-header">Project Documentation</li>
<li><a href="project-info.html" title="Project Information"><span class="icon-chevron-down"></span>Project Information</a>
<ul class="nav nav-list">
<li class="active"><a href="#"><span class="none"></span>About</a></li>
<li><a href="dependencies.html" title="Dependencies"><span class="none"></span>Dependencies</a></li>
<li><a href="dependency-info.html" title="Dependency Information"><span class="none"></span>Dependency Information</a></li>
<li><a href="dependency-convergence.html" title="Dependency Convergence"><span class="none"></span>Dependency Convergence</a></li>
<li><a href="dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
<li><a href="team-list.html" title="Team"><span class="none"></span>Team</a></li>
<li><a href="mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
<li><a href="issue-tracking.html" title="Issue Management"><span class="none"></span>Issue Management</a></li>
<li><a href="license.html" title="Licenses"><span class="none"></span>Licenses</a></li>
<li><a href="source-repository.html" title="Source Code Management"><span class="none"></span>Source Code Management</a></li>
<li><a href="project-summary.html" title="Summary"><span class="none"></span>Summary</a></li>
</ul></li>
<li><a href="project-reports.html" title="Project Reports"><span class="icon-chevron-right"></span>Project Reports</a></li>
<li class="nav-header"><img class="imageLink" src="icon-info-sign" alt="Log4j Project Information" border="0"/> Log4j Project Information</li>
<li><a href="../dependencies.html" title="Dependencies"><span class="none"></span>Dependencies</a></li>
<li><a href="../dependency-convergence.html" title="Dependency Convergence"><span class="none"></span>Dependency Convergence</a></li>
<li><a href="../dependency-management.html" title="Dependency Management"><span class="none"></span>Dependency Management</a></li>
<li><a href="../team-list.html" title="Project Team"><span class="none"></span>Project Team</a></li>
<li><a href="../mail-lists.html" title="Mailing Lists"><span class="none"></span>Mailing Lists</a></li>
<li><a href="../issue-tracking.html" title="Issue Tracking"><span class="none"></span>Issue Tracking</a></li>
<li><a href="../license.html" title="Project License"><span class="none"></span>Project License</a></li>
<li><a href="../source-repository.html" title="Source Repository"><span class="none"></span>Source Repository</a></li>
<li><a href="../project-summary.html" title="Project Summary"><span class="none"></span>Project Summary</a></li>
<li class="nav-header"><img class="imageLink" src="icon-cog" alt="Log4j Project Reports" border="0"/> Log4j Project Reports</li>
<li><a href="../changes-report.html" title="Changes Report"><span class="none"></span>Changes Report</a></li>
<li><a href="../jira-report.html" title="JIRA Report"><span class="none"></span>JIRA Report</a></li>
<li><a href="../surefire-report.html" title="Surefire Report"><span class="none"></span>Surefire Report</a></li>
<li><a href="../rat-report.html" title="RAT Report"><span class="none"></span>RAT Report</a></li>
</ul>
</nav>
<div class="well sidebar-nav">
<hr />
<div id="poweredBy">
<div class="clear"></div>
<div class="clear"></div>
<div class="clear"></div>
<a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="./images/logos/maven-feather.png" /></a>
</div>
</div>
</header>
<main id="bodyColumn" class="span10" >
<!-- vim: set syn=markdown : -->
<!--
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.
-->
<h1>Log4j Spring Cloud Configuration</h1>
<p>This module allows logging configuration files to be dynamically updated when new versions are available in Spring Cloud Configuration.</p><section>
<h2><a name="Overview"></a>Overview</h2>
<p>Spring Boot applications initialize logging 3 times. 1. SpringApplication declares a Logger. This Logger will be initialized using Log4j&#x2019;s &#x201c;normal&#x201d; mechanisms. Thus a system property named log4j2.configurationFile will be checked to see if a specific configuration file has been provided, otherwise it will search for a configuration file on the classpath. The property may also be declare in log4j2.component.properties.</p></section><section>
<h2><a name="Usage"></a>Usage</h2>
<p>Log4j configuration files that specify a monitor interval of greater than zero will use polling to determine whether the configuration has been updated. If the monitor interval is zero then Log4j will listen for notifications from Spring Cloud Config and will check for configuration changes each time an event is generated. If the monitor interval is less than zero Log4j will not check for changes to the logging configuration.</p>
<p>When referencing a configuration located in Spring Cloud Config the configuration should be referenced similar to</p>
<div>
<div>
<pre class="source">log4j.configurationFile=http://host.docker.internal:8888/ConfigService/sampleapp/default/master/log4j2.xml
</pre></div></div>
<p>When running in a docker container host.docker.internal may be used as the domain name to access an application running on the same hose outside of the docker container. Note that in accordance with Spring Cloud Config practices but the application, profile, and label should be specified in the url.</p>
<p>The Spring Cloud Config support also allows connections using TLS and/or basic authentication. When using basic authentication the userid and password may be specified as system properties, log4j2.component.properties or Spring Boot&#x2019;s bootstrap.yml. The table below shows the alternate names that may be used to specify the properties. Any of the alternatives may be used in any configuration location.</p>
<table border="0" class="table table-striped">
<thead>
<tr class="a">
<th> Property </th>
<th> Alias </th>
<th> Spring-like alias </th>
<th> Purpose </th></tr>
</thead><tbody>
<tr class="b">
<td> log4j2.configurationUserName </td>
<td> log4j2.config.username </td>
<td> logging.auth.username </td>
<td> User name for basic authentication </td></tr>
<tr class="a">
<td> log4j2.configurationPassword </td>
<td> log4j2.config.password </td>
<td> logging.auth.password </td>
<td> Password for basic authentication </td></tr>
<tr class="b">
<td> log4j2.authorizationProvider </td>
<td> log4j2.config.authorizationProvider </td>
<td> logging.auth.authorizationProvider </td>
<td> Class used to create HTTP Authorization header </td></tr>
</tbody>
</table>
<div>
<div>
<pre class="source">log4j2.configurationUserName=guest
log4j2.configurationPassword=guest
</pre></div></div>
<p>As noted above, Log4j supports accessing logging configuration from bootstrap.yml. As an example, to configure reading from a Spring Cloud Configuration service using basic authoriztion you can do:</p>
<div>
<div>
<pre class="source">spring:
application:
name: myApp
cloud:
config:
uri: https://spring-configuration-server.mycorp.com
username: appuser
password: changeme
logging:
config: classpath:log4j2.xml
label: ${spring.cloud.config.label}
---
spring:
profiles: dev
logging:
config: https://spring-configuration-server.mycorp.com/myApp/default/${logging.label}/log4j2-dev.xml
auth:
username: appuser
password: changeme
</pre></div></div>
<p>Note that Log4j currently does not directly support encrypting the password. However, Log4j does use Spring&#x2019;s standard APIs to access properties in the Spring configuration so any customizations made to Spring&#x2019;s property handling would apply to the properties Log4j uses as well.</p>
<p>If more extensive authentication is required an AuthorizationProvider can be implemented and the fully qualified class name in the log4j2.authorizationProvider system property, in log4j2.component.properties or in Spring&#x2019;s bootstrap.yml using either the log4j2.authorizationProvider key or with the key logging.auth.authorizationProvider.</p>
<p>TLS can be enabled by adding the following system properties or defining them in log4j2.component.properties</p>
<table border="0" class="table table-striped">
<thead>
<tr class="a">
<th> Property </th>
<th> Optional or Default Value </th>
<th align="left"> Description </th></tr>
</thead><tbody>
<tr class="b">
<td> log4j2.trustStoreLocation </td>
<td> Optional </td>
<td align="left"> The location of the trust store. If not provided the default trust store will be used.</td></tr>
<tr class="a">
<td> log4j2.trustStorePassword </td>
<td> Optional </td>
<td align="left"> Password needed to access the trust store. </td></tr>
<tr class="b">
<td> log4j2.trustStorePasswordFile </td>
<td> Optional </td>
<td align="left"> The location of a file that contains the password for the trust store. </td></tr>
<tr class="a">
<td> log4j2.trustStorePasswordEnvironmentVariable </td>
<td> Optional </td>
<td align="left"> The name of the environment variable that contains the trust store password. </td></tr>
<tr class="b">
<td> log4j2.trustStoreKeyStoreType </td>
<td> Required if keystore location provided </td>
<td align="left"> The type of key store. </td></tr>
<tr class="a">
<td> log4j2.trustStoreKeyManagerFactoryAlgorithm </td>
<td> Optional </td>
<td align="left"> Java cryptographic algorithm. </td></tr>
<tr class="b">
<td> log4j2.keyStoreLocation </td>
<td> Optional </td>
<td align="left"> The location of the key store. If not provided the default key store will be used.</td></tr>
<tr class="a">
<td> log4j2.keyStorePassword </td>
<td> Optional </td>
<td align="left"> Password needed to access the key store. </td></tr>
<tr class="b">
<td> log4j2.keyStorePasswordFile </td>
<td> Optional </td>
<td align="left"> The location of a file that contains the password for the key store. </td></tr>
<tr class="a">
<td> log4j2.keyStorePasswordEnvironmentVariable </td>
<td> Optional </td>
<td align="left"> The name of the environment variable that contains the key store password.</td></tr>
<tr class="b">
<td> log4j2.keyStoreType </td>
<td> Required if trust store location provided. </td>
<td align="left"> The type of key store. </td></tr>
<tr class="a">
<td> log4j2.keyStoreKeyManagerFactoryAlgorithm </td>
<td> Optional </td>
<td align="left"> Java cryptographic algorithm. </td></tr>
<tr class="b">
<td> log4j2.sslVerifyHostName </td>
<td> false </td>
<td align="left"> true or false </td></tr>
</tbody>
</table></section><section>
<h2><a name="Requirements"></a>Requirements</h2>
<p>The Log4j 2 Spring Cloud Configuration integration has a dependency on Log4j 2 API, Log4j 2 Core, and Spring Cloud Configuration versions 2.0.3.RELEASE or 2.1.1.RELEASE or later versions it either release series. For more information, see <a href="../../runtime-dependencies.html">Runtime Dependencies</a>.</p></section>
</main>
</div>
</div>
<hr/>
<footer>
<div class="container-fluid">
<div class="row-fluid">
<p align="center">Copyright &copy; 1999-2020 <a class="external" href="http://www.apache.org">The Apache Software Foundation</a>. All Rights Reserved.<br>
Apache Logging, Apache Log4j, Log4j, Apache, the Apache feather logo, and the Apache Logging project logo are trademarks of The Apache Software Foundation.</p>
</div>
</div>
</footer>
</body>
</html>