| <!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 2015-09-20 --> |
| <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>Log4j Core – CPD Results - Apache Log4j Core</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="Date-Revision-yyyymmdd" content="20150920" /> |
| <meta http-equiv="Content-Language" content="en" /> |
| |
| </head> |
| <body class="composite"> |
| <a href="https://logging.apache.org/"> |
| <img class="logo-left" src="./images/ls-logo.jpg" alt="Apache logging services logo" /> |
| </a> |
| <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/log4j-core/">Apache Log4j Core ™</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="https://analysis.apache.org/dashboard/index/org.apache.logging.log4j:log4j" class="external" target="_blank" title="Sonar">Sonar</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="../index.html" title="Log4j">Log4j</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="../runtime-dependencies.html" title="Runtime Dependencies">Runtime Dependencies</a> |
| </li> |
| <li class="none"> |
| <a href="../faq.html" title="FAQ">FAQ</a> |
| </li> |
| <li class="none"> |
| <a href="../articles.html" title="Articles">Articles</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="collapsed"> |
| <a href="../manual/customconfig.html" title="Extending Log4j Configuration">Extending Log4j Configuration</a> |
| </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 active"> |
| <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-jul/index.html" title="JUL Adapter">JUL Adapter</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 Appender">Apache Flume 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> |
| <li class="none"> |
| <a href="../log4j-iostreams/index.html" title="Log4j IO Streams">Log4j IO Streams</a> |
| </li> |
| <li class="none"> |
| <a href="../log4j-liquibase/index.html" title="Log4j Liquibase Binding">Log4j Liquibase Binding</a> |
| </li> |
| </ul> |
| <ul class="nav nav-list"> |
| <li class="nav-header">Component Documentation</li> |
| <li class="collapsed"> |
| <a href="project-info.html" title="Component Information">Component Information</a> |
| </li> |
| <li class="expanded"> |
| <a href="project-reports.html" title="Component Reports">Component Reports</a> |
| <ul> |
| <li class="none"> |
| <a href="rat-report.html" title="Rat Report">Rat Report</a> |
| </li> |
| <li class="none"> |
| <a href="checkstyle.html" title="Checkstyle">Checkstyle</a> |
| </li> |
| <li class="none"> |
| <a href="apidocs/index.html" title="JavaDocs">JavaDocs</a> |
| </li> |
| <li class="none"> |
| <a href="xref/index.html" title="Source Xref">Source Xref</a> |
| </li> |
| <li class="none active"> |
| <a href="cpd.html" title="CPD">CPD</a> |
| </li> |
| <li class="none"> |
| <a href="pmd.html" title="PMD">PMD</a> |
| </li> |
| </ul> |
| </li> |
| </ul> |
| <ul class="nav nav-list"> |
| <li class="nav-header"><i class="icon-info-sign"></i>Log4j 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>Log4j 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"> |
| <div class="section"> |
| <h2><a name="CPD_Results"></a>CPD Results</h2> |
| <p>The following document contains the results of PMD's <a class="externalLink" href="http://pmd.sourceforge.net/cpd.html">CPD</a> 5.3.2.</p></div> |
| <div class="section"> |
| <h2><a name="Duplications"></a>Duplications</h2> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/config/AwaitCompletionReliabilityStrategy.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/config/AwaitCompletionReliabilityStrategy.html#L47">47</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/config/LockingReliabilityStrategy.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/config/LockingReliabilityStrategy.html#L39">39</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> this.loggerConfig = Objects.requireNonNull(loggerConfig, "loggerConfig is null"); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, java.lang.String, java.lang.String, org.apache.logging.log4j.Marker, org.apache.logging.log4j.Level, org.apache.logging.log4j.message.Message, java.lang.Throwable) |
| */ |
| @Override |
| public void log(final Supplier<LoggerConfig> reconfigured, final String loggerName, final String fqcn, |
| final Marker marker, final Level level, final Message data, final Throwable t) { |
| |
| final LoggerConfig config = getActiveLoggerConfig(reconfigured); |
| try { |
| config.log(loggerName, fqcn, marker, level, data, t); |
| } finally { |
| config.getReliabilityStrategy().afterLogEvent(); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, org.apache.logging.log4j.core.LogEvent) |
| */ |
| @Override |
| public void log(final Supplier<LoggerConfig> reconfigured, final LogEvent event) { |
| final LoggerConfig config = getActiveLoggerConfig(reconfigured); |
| try { |
| config.log(event); |
| } finally { |
| config.getReliabilityStrategy().afterLogEvent(); |
| } |
| } |
| |
| /* (non-Javadoc) |
| * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeLogEvent(org.apache.logging.log4j.core.config.LoggerConfig, org.apache.logging.log4j.util.Supplier) |
| */ |
| @Override |
| public LoggerConfig getActiveLoggerConfig(final Supplier<LoggerConfig> next) { |
| LoggerConfig result = this.loggerConfig; |
| if (!beforeLogEvent()) { |
| result = next.get(); |
| return result.getReliabilityStrategy().getActiveLoggerConfig(next); |
| } |
| return result; |
| } |
| |
| private boolean beforeLogEvent() {</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.html#L55">55</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.html#L50">50</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> final Filter filter, final MemoryMappedFileManager manager, final String filename, |
| final boolean ignoreExceptions, final boolean immediateFlush, final Advertiser advertiser) { |
| super(name, layout, filter, ignoreExceptions, immediateFlush, manager); |
| if (advertiser != null) { |
| final Map<String, String> configuration = new HashMap<>(layout.getContentFormat()); |
| configuration.putAll(manager.getContentFormat()); |
| configuration.put("contentType", layout.getContentType()); |
| configuration.put("name", name); |
| advertisement = advertiser.advertise(configuration); |
| } |
| this.fileName = filename; |
| this.advertiser = advertiser; |
| } |
| |
| @Override |
| public void stop() { |
| super.stop(); |
| if (advertiser != null) { |
| advertiser.unadvertise(advertisement); |
| } |
| } |
| |
| /** |
| * Write the log entry rolling over the file when required. |
| * |
| * @param event The LogEvent. |
| */ |
| @Override |
| public void append(final LogEvent event) { |
| |
| // Leverage the nice batching behaviour of async Loggers/Appenders: |
| // we can signal the file manager that it needs to flush the buffer |
| // to disk at the end of a batch. |
| // From a user's point of view, this means that all log events are |
| // _always_ available in the log file, without incurring the overhead |
| // of immediateFlush=true. |
| getManager().setEndOfBatch(event.isEndOfBatch()); |
| super.append(event); |
| } |
| |
| /** |
| * Returns the file name this appender is associated with. |
| * |
| * @return The File name. |
| */ |
| public String getFileName() { |
| return this.fileName; |
| } |
| |
| /** |
| * Returns the length of the memory mapped region. |
| * |
| * @return the length of the memory mapped region |
| */ |
| public int getRegionLength() {</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/filter/MapFilter.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/filter/MapFilter.html#L129">129</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/filter/StructuredDataFilter.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/filter/StructuredDataFilter.html#L114">114</a></td></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/filter/ThreadContextMapFilter.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/filter/ThreadContextMapFilter.html#L124">124</a></td></tr> |
| <tr class="a"><td colspan='2'> |
| <div> |
| <pre> LOGGER.error("keys and values must be specified for the MapFilter"); |
| return null; |
| } |
| final Map<String, List<String>> map = new HashMap<>(); |
| for (final KeyValuePair pair : pairs) { |
| final String key = pair.getKey(); |
| if (key == null) { |
| LOGGER.error("A null key is not valid in MapFilter"); |
| continue; |
| } |
| final String value = pair.getValue(); |
| if (value == null) { |
| LOGGER.error("A null value for key " + key + " is not allowed in MapFilter"); |
| continue; |
| } |
| List<String> list = map.get(pair.getKey()); |
| if (list != null) { |
| list.add(value); |
| } else { |
| list = new ArrayList<>(); |
| list.add(value); |
| map.put(pair.getKey(), list); |
| } |
| } |
| if (map.isEmpty()) { |
| LOGGER.error("MapFilter is not configured with any valid key value pairs");</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="b"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/appender/RandomAccessFileManager.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RandomAccessFileManager.html#L76">76</a></td></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.html#L87">87</a></td></tr> |
| <tr class="a"><td colspan='2'> |
| <div> |
| <pre> isFlush, bufferSize, advertiseURI, layout), FACTORY); |
| } |
| |
| public Boolean isEndOfBatch() { |
| return isEndOfBatch.get(); |
| } |
| |
| public void setEndOfBatch(final boolean isEndOfBatch) { |
| this.isEndOfBatch.set(Boolean.valueOf(isEndOfBatch)); |
| } |
| |
| @Override |
| protected synchronized void write(final byte[] bytes, int offset, int length) { |
| super.write(bytes, offset, length); // writes to dummy output stream |
| |
| int chunk = 0; |
| do { |
| if (length > buffer.remaining()) { |
| flush(); |
| } |
| chunk = Math.min(length, buffer.remaining()); |
| buffer.put(bytes, offset, chunk); |
| offset += chunk; |
| length -= chunk; |
| } while (length > 0); |
| |
| if (isImmediateFlush || isEndOfBatch.get() == Boolean.TRUE) { |
| flush(); |
| } |
| } |
| |
| @Override</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="b"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/config/properties/PropertiesConfigurationFactory.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationFactory.html#L243">243</a></td></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/config/properties/PropertiesConfigurationFactory.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationFactory.html#L286">286</a></td></tr> |
| <tr class="a"><td colspan='2'> |
| <div> |
| <pre> loggerBuilder = builder.newLogger(name, level); |
| } |
| String appenderRefs = properties.getProperty("appenderRefs"); |
| if (appenderRefs != null) { |
| properties.remove("appenderRefs"); |
| String[] refNames = appenderRefs.split(","); |
| for (String appenderRef : refNames) { |
| appenderRef = appenderRef.trim(); |
| Properties refProps = PropertiesUtil.extractSubset(properties, "appenderRef." + appenderRef); |
| loggerBuilder.add(createAppenderRef(builder, appenderRef, refProps)); |
| } |
| } |
| String filters = properties.getProperty("filters"); |
| if (filters != null) { |
| properties.remove("filters"); |
| String[] filterNames = filters.split(","); |
| for (String filterName : filterNames) { |
| filterName = filterName.trim(); |
| Properties filterProps = PropertiesUtil.extractSubset(properties, "filter." + filterName); |
| loggerBuilder.add(createFilter(builder, filterName, filterProps)); |
| } |
| }</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="b"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/appender/FileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/FileAppender.html#L49">49</a></td></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/MemoryMappedFileAppender.html#L55">55</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/appender/RandomAccessFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RandomAccessFileAppender.html#L50">50</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> final FileManager manager, final String filename, final boolean ignoreExceptions, |
| final boolean immediateFlush, final Advertiser advertiser) { |
| |
| super(name, layout, filter, ignoreExceptions, immediateFlush, manager); |
| if (advertiser != null) { |
| final Map<String, String> configuration = new HashMap<>(layout.getContentFormat()); |
| configuration.putAll(manager.getContentFormat()); |
| configuration.put("contentType", layout.getContentType()); |
| configuration.put("name", name); |
| advertisement = advertiser.advertise(configuration); |
| } |
| this.fileName = filename; |
| this.advertiser = advertiser; |
| } |
| |
| @Override |
| public void stop() { |
| super.stop(); |
| if (advertiser != null) { |
| advertiser.unadvertise(advertisement); |
| } |
| }</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/appender/RollingFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RollingFileAppender.html#L59">59</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.html#L60">60</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> final boolean ignoreExceptions, final boolean immediateFlush, final Advertiser advertiser) { |
| super(name, layout, filter, ignoreExceptions, immediateFlush, manager); |
| if (advertiser != null) { |
| final Map<String, String> configuration = new HashMap<>(layout.getContentFormat()); |
| configuration.put("contentType", layout.getContentType()); |
| configuration.put("name", name); |
| advertisement = advertiser.advertise(configuration); |
| } |
| this.fileName = fileName; |
| this.filePattern = filePattern; |
| this.advertiser = advertiser; |
| } |
| |
| @Override |
| public void stop() { |
| super.stop(); |
| if (advertiser != null) { |
| advertiser.unadvertise(advertisement); |
| } |
| } |
| |
| /** |
| * Write the log entry rolling over the file when required. |
| |
| * @param event The LogEvent. |
| */ |
| @Override |
| public void append(final LogEvent event) {</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/filter/BurstFilter.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/filter/BurstFilter.html#L96">96</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/filter/ThresholdFilter.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/filter/ThresholdFilter.html#L48">48</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> } |
| |
| @Override |
| public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, |
| final Object... params) { |
| return filter(level); |
| } |
| |
| @Override |
| public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg, |
| final Throwable t) { |
| return filter(level); |
| } |
| |
| @Override |
| public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg, |
| final Throwable t) { |
| return filter(level); |
| } |
| |
| @Override |
| public Result filter(final LogEvent event) { |
| return filter(event.getLevel()); |
| } |
| |
| /** |
| * Decide if we're going to log <code>event</code> based on whether the |
| * maximum burst of log statements has been exceeded. |
| * |
| * @param level The log level. |
| * @return The onMatch value if the filter passes, onMismatch otherwise. |
| */ |
| private Result filter(final Level level) {</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/layout/CsvLogEventLayout.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/layout/CsvLogEventLayout.html#L57">57</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/layout/CsvParameterLayout.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/layout/CsvParameterLayout.html#L63">63</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> public static CsvLogEventLayout createLayout( |
| // @formatter:off |
| @PluginAttribute(value = "format", defaultString = DEFAULT_FORMAT) final String format, |
| @PluginAttribute("delimiter") final Character delimiter, |
| @PluginAttribute("escape") final Character escape, |
| @PluginAttribute("quote") final Character quote, |
| @PluginAttribute("quoteMode") final QuoteMode quoteMode, |
| @PluginAttribute("nullString") final String nullString, |
| @PluginAttribute("recordSeparator") final String recordSeparator, |
| @PluginAttribute(value = "charset", defaultString = DEFAULT_CHARSET) final Charset charset, |
| @PluginAttribute("header") final String header, |
| @PluginAttribute("footer") final String footer) |
| // @formatter:on |
| { |
| |
| final CSVFormat csvFormat = createFormat(format, delimiter, escape, quote, quoteMode, nullString, recordSeparator); |
| return new CsvLogEventLayout(charset, csvFormat, header, footer);</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/net/server/TcpSocketServer.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/net/server/TcpSocketServer.html#L125">125</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/net/server/UdpSocketServer.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/net/server/UdpSocketServer.html#L76">76</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> return new TcpSocketServer<>(port, new XmlInputStreamLogEventBridge()); |
| } |
| |
| /** |
| * Main startup for the server. |
| * |
| * @param args |
| * The command line arguments. |
| * @throws Exception |
| * if an error occurs. |
| */ |
| public static void main(final String[] args) throws Exception { |
| if (args.length < 1 || args.length > 2) { |
| System.err.println("Incorrect number of arguments"); |
| printUsage(); |
| return; |
| } |
| final int port = Integer.parseInt(args[0]); |
| if (port <= 0 || port >= MAX_PORT) { |
| System.err.println("Invalid port number"); |
| printUsage(); |
| return; |
| } |
| if (args.length == 2 && args[1].length() > 0) { |
| ConfigurationFactory.setConfigurationFactory(new ServerConfigurationFactory(args[1])); |
| } |
| final TcpSocketServer<ObjectInputStream> socketServer = TcpSocketServer.createSerializedSocketServer(port);</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/filter/DynamicThresholdFilter.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/filter/DynamicThresholdFilter.html#L129">129</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/filter/LevelRangeFilter.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/filter/LevelRangeFilter.html#L81">81</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> } |
| |
| @Override |
| public Result filter(final LogEvent event) { |
| return filter(event.getLevel()); |
| } |
| |
| @Override |
| public Result filter(final Logger logger, final Level level, final Marker marker, final Message msg, |
| final Throwable t) { |
| return filter(level); |
| } |
| |
| @Override |
| public Result filter(final Logger logger, final Level level, final Marker marker, final Object msg, |
| final Throwable t) { |
| return filter(level); |
| } |
| |
| @Override |
| public Result filter(final Logger logger, final Level level, final Marker marker, final String msg, |
| final Object... params) { |
| return filter(level); |
| } |
| |
| public String getKey() {</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/config/AwaitUnconditionallyReliabilityStrategy.html#L45">45</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/config/DefaultReliabilityStrategy.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/config/DefaultReliabilityStrategy.html#L36">36</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> DEFAULT_SLEEP_MILLIS); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, |
| * java.lang.String, java.lang.String, org.apache.logging.log4j.Marker, org.apache.logging.log4j.Level, |
| * org.apache.logging.log4j.message.Message, java.lang.Throwable) |
| */ |
| @Override |
| public void log(Supplier<LoggerConfig> reconfigured, String loggerName, String fqcn, Marker marker, Level level, |
| Message data, Throwable t) { |
| loggerConfig.log(loggerName, fqcn, marker, level, data, t); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#log(org.apache.logging.log4j.util.Supplier, |
| * org.apache.logging.log4j.core.LogEvent) |
| */ |
| @Override |
| public void log(Supplier<LoggerConfig> reconfigured, LogEvent event) { |
| loggerConfig.log(event); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeLogEvent(org.apache.logging.log4j.core.config. |
| * LoggerConfig, org.apache.logging.log4j.util.Supplier) |
| */ |
| @Override |
| public LoggerConfig getActiveLoggerConfig(Supplier<LoggerConfig> next) { |
| return this.loggerConfig; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#afterLogEvent() |
| */ |
| @Override |
| public void afterLogEvent() { |
| // no action |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopAppenders() |
| */ |
| @Override |
| public void beforeStopAppenders() { |
| // no action |
| } |
| |
| /* (non-Javadoc) |
| * @see org.apache.logging.log4j.core.config.ReliabilityStrategy#beforeStopConfiguration(org.apache.logging.log4j.core.config.Configuration) |
| */ |
| @Override |
| public void beforeStopConfiguration(Configuration configuration) {</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/appender/RollingFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RollingFileAppender.html#L163">163</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.html#L177">177</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> if (name == null) { |
| LOGGER.error("No name provided for FileAppender"); |
| return null; |
| } |
| |
| if (fileName == null) { |
| LOGGER.error("No filename was provided for FileAppender with name " + name); |
| return null; |
| } |
| |
| if (filePattern == null) { |
| LOGGER.error("No filename pattern provided for FileAppender with name " + name); |
| return null; |
| } |
| |
| if (policy == null) { |
| LOGGER.error("A TriggeringPolicy must be provided"); |
| return null; |
| } |
| |
| if (strategy == null) { |
| strategy = DefaultRolloverStrategy.createStrategy(null, null, null, |
| String.valueOf(Deflater.DEFAULT_COMPRESSION), config); |
| } |
| |
| if (layout == null) { |
| layout = PatternLayout.createDefaultLayout(); |
| } |
| |
| final RollingFileManager manager = RollingFileManager.getFileManager(fileName, filePattern, isAppend,</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/appender/RandomAccessFileManager.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RandomAccessFileManager.html#L105">105</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/rolling/RollingRandomAccessFileManager.html#L125">125</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> } |
| |
| @Override |
| public synchronized void flush() { |
| buffer.flip(); |
| try { |
| randomAccessFile.write(buffer.array(), 0, buffer.limit()); |
| } catch (final IOException ex) { |
| final String msg = "Error writing to RandomAccessFile " + getName(); |
| throw new AppenderLoggingException(msg, ex); |
| } |
| buffer.clear(); |
| } |
| |
| @Override |
| public synchronized void close() { |
| flush(); |
| try { |
| randomAccessFile.close(); |
| } catch (final IOException ex) { |
| LOGGER.error("Unable to close RandomAccessFile " + getName() + ". " |
| + ex); |
| } |
| }</pre></div></td></tr></table> |
| <table border="0" class="bodyTable"> |
| <tr class="a"> |
| <th>File</th> |
| <th>Line</th></tr> |
| <tr class="b"> |
| <td>org/apache/logging/log4j/core/appender/RollingFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RollingFileAppender.html#L144">144</a></td></tr> |
| <tr class="a"> |
| <td>org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.java</td> |
| <td><a href="./xref/org/apache/logging/log4j/core/appender/RollingRandomAccessFileAppender.html#L161">161</a></td></tr> |
| <tr class="b"><td colspan='2'> |
| <div> |
| <pre> @PluginAttribute("immediateFlush") final String immediateFlush, |
| @PluginElement("Policy") final TriggeringPolicy policy, |
| @PluginElement("Strategy") RolloverStrategy strategy, |
| @PluginElement("Layout") Layout<? extends Serializable> layout, |
| @PluginElement("Filter") final Filter filter, |
| @PluginAttribute("ignoreExceptions") final String ignore, |
| @PluginAttribute("advertise") final String advertise, |
| @PluginAttribute("advertiseURI") final String advertiseURI, |
| @PluginConfiguration final Configuration config) { |
| |
| final boolean isAppend = Booleans.parseBoolean(append, true); |
| final boolean ignoreExceptions = Booleans.parseBoolean(ignore, true); |
| final boolean isBuffered = Booleans.parseBoolean(bufferedIO, true);</pre></div></td></tr></table></div> |
| </td> |
| </tr> |
| </table> |
| </div> |
| |
| <div class="footer"> |
| <p>Copyright © 1999-2015 <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://getbootstrap.com/">Twitter Bootstrap</a>. Icons from <a class="external" href="http://glyphicons.com/">Glyphicons Free</a>.</p> |
| </div> |
| </div> |
| </body> |
| </html> |