Uploaded image for project: 'Log4j 2'
  1. Log4j 2
  2. LOG4J2-746

Custom Appender

VotersWatch issueWatchersLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Duplicate
    • Affects Version/s: 2.0
    • Fix Version/s: 2.0.1
    • Component/s: Appenders
    • Environment:

      Windows 7 (x64), Java 7, Tomcat 7

      Description

      I want to configure Sentry to to be working with log4j2.
      To do that I need to add sentry appender to log4j2.xml file.
      Actually it does not differ from configuring custom appender.

      Manual page suggests that I need to add package with the appender to "packages" attribute of Configuration element:
      http://logging.apache.org/log4j/2.x/manual/configuration.html#ConfigurationSyntax

      My log4j2.xml file looks like this:

      <Configuration status="trace" packages="net.kencochrane.raven.log4j2">
      	<Appenders>
      		<Console name="Console" target="SYSTEM_OUT">
      			<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
      		</Console>
      		<Raven name="Sentry">
      			<dsn>
      				https://publicKey:secretKey@host:port/1?options
      			</dsn>
      		</Raven>		
      	</Appenders>
      	<Loggers>	
      		<Root level="error">
      			<AppenderRef ref="Console" />
      			<AppenderRef ref="Sentry" />
      		</Root>
      	</Loggers>
      </Configuration> 
      

      Package 'net.kencochrane.raven.log4j2' contains a class that extends 'org.apache.logging.log4j.core.appender.AbstractAppender'.
      However, looks like it is completely ignored.
      After some digging, I found out, that PluginManager uses already defined list of existing plugins, which is available within binary file (/log4j-core-2.0.jar!/META-INF/org/apache/logging/log4j/core/config/plugins/Log4j2Plugins.dat) and "packages" attribute actually doesnt do anything, becuase the only thing that XmlConfiguration does with its value is:

      PluginManager.addPackage(p);
      

      but the method is deprecated and empty:

          /**
           * Adds a package name to be scanned for plugins. Must be invoked prior to plugins being collected.
           * @param p The package name.
           */
          @Deprecated // no more need for this method due to PluginProcessor
          public static void addPackage(final String p) {
          }
      

      As you can see, Javadoc points to PluginProcessor, which actually should create proper binary file based on Plugin annotation. However putting a breakpoint in 'process' method showed that it is not invoked during the log4j initialization.

      Similar issue was already reported and resolved
      https://issues.apache.org/jira/browse/LOG4J2-95
      but looks like problem came up again, and suggestes workaround dont work anymore.

      What should I do to force PluginProcessor create Log4j2Plugins.dat file again?

        Attachments

        Issue Links

          Activity

            People

            • Assignee:
              rpopma Remko Popma
              Reporter:
              MoOmEeN Radek Miazio

              Dates

              • Created:
                Updated:
                Resolved:

                Issue deployment