2016-07-07 13 views
2

Seit letzter Woche bekomme ich diesen seltsamen Fehler. ohne irgendeine Änderung an meinem Code, der unten angegeben ist.Log4J Problem -> [Schwerwiegender Fehler]: 1: 1: Inhalt ist in Prolog nicht erlaubt

Ich ging durch die SO-Antworten um den gleichen Fehler, aber die meisten verweisen Xml Parsing Problem, das in meinem Fall ist es überhaupt nicht.

Eine weitere seltsame Sache ist, dass es mir die Stack-Trace nicht geben Sie bitte die Kommentare in den Code für die Klarheit ausgelesen

private void initializeLoggerContext(Properties properties) throws IOException { 
     System.out.println("initializeLoggerContext : Properties -> " + properties.toString()); 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     properties.store(output, null); 
     ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); 
     Configuration conf = null; 
     try { 
      ConfigurationSource c = new ConfigurationSource(input); 
      //conf = PropertiesConfigurationFactory.getInstance().getConfiguration(new ConfigurationSource(input)); 
      ConfigurationFactory conffact = PropertiesConfigurationFactory.getInstance(); 
      System.out.println("ConfigurationFactory conffact = " + conffact.toString()); 
      //ERROR : below line prints message on the console as "[Fatal Error] :1:1: Content is not allowed in prolog." with no stack trace 
      conf = conffact.getConfiguration(c); 
      final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
      ctx.start(conf); 
      LOGGER.info("Logging configuration is : {}", ctx); 
     } catch(Exception e) {//Note getting called when getting "[Fatal Error] :1:1: Content is not allowed in prolog." on the console 
      System.out.println("initializeLoggerContext : Exception is -> "); 
      e.printStackTrace(); 
     } 
    } 

ich eine Beispielanwendung unter den ursprünglichen Eingangs Eigenschaften erstellt haben, aber immer noch es schlägt mit dem log4j 2.5 fehl. Wenn ich mit der einfachen Eigenschaft mit einem Schlüssel-Wert-Paar versuchte, dann war auch das Ergebnis dasselbe. Bitte überprüfen Sie den Code unten:

import java.io.ByteArrayInputStream; 
import java.io.ByteArrayOutputStream; 
import java.io.IOException; 
import java.io.StringBufferInputStream; 
import java.util.Properties; 

import org.apache.logging.log4j.LogManager; 
import org.apache.logging.log4j.core.LoggerContext; 
import org.apache.logging.log4j.core.config.Configuration; 
import org.apache.logging.log4j.core.config.ConfigurationSource; 
import org.apache.logging.log4j.core.config.properties.PropertiesConfigurationFactory; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 

public class EcommLoggingIssueByDeven { 

    private static final Logger LOGGER = LoggerFactory.getLogger(EcommLoggingIssueByDeven.class); 

    public static void main(String[] args) throws IOException { 
     Properties properties = new Properties(); 
     String str = "appender.jdbc.policies.type=Policies" 
       + ", logger.xmanager.appenderRefs=xmanager" 
       + ", appender.remedy.fileName=${remedyfilename}" 
       + ", logger.xmanager.additivity=false" 
       + ", appender.eventFramework.layout.pattern=%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+0} %p %env %appDetail [%t] %l %customInfo%msgInfo %n" 
       + ", appender.spring.layout.type=PatternLayout" 
       + ", appender.application.fileName=${appfilename}" 
       + ", appender.scm.policies.size.type=SizeBasedTriggeringPolicy" 
       + ", appender.scm.layout.type=PatternLayout" 
       + ", appender.remedy.filePattern=${sys:ECOMM_HOME}/logs/filename-%i.log.gz" 
       + ", logger.jdbc.additivity=false" 
       + ", appender.application.type=RollingFile" 
       + ", rootLogger.appenderRefs=application" 
       + ", appender.eventFramework.policies.size.size=1MB" 
       + ", appender.application.strategy.max=10" 
       + ", appender.spring.type=RollingFile" 
       + ", appender.remedy.policies.size.type=SizeBasedTriggeringPolicy" 
       + ", appender.eventFramework.policies.type=Policies" 
       + ", status=info" 
       + ", property.eventFrameworkfilename=${sys:ECOMM_HOME}/logs/filename.log" 
       + ", logger.application.level=DEBUG" 
       + ", appender.remedy.name=remedy" 
       + ", appender.application.policies.type=Policies" 
       + ", logger.remedy.name=com.ecommerce.fulfillment.external.remedy" 
       + ", logger.jdbc.appenderRef.jdbc.ref=jdbc" 
       + ", logger.remedy.level=INFO" 
       + ", logger.remedy.appenderRefs=remedy" 
       + ", appender.application.filePattern=/log/ecomm-logging/app-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz" 
       + ", appender.spring.fileName=${springfilename}" 
       + ", logger.eventFramework.appenderRef.eventFramework.ref=eventFramework" 
       + ", appender.scm.policies.size.size=1MB" 
       + ", logger.eventFramework.name=com.ecommerce.fulfillment.common.eventframework" 
       + ", property.appfilename=/log/ecomm-logging/app.log" 
       + ", appender.console.layout.pattern=%m%n" 
       + ", appender.eventFramework.layout.type=PatternLayout" 
       + ", appender.spring.policies.type=Policies" 
       + ", appender.config.layout.type=PatternLayout" 
       + ", logger.scm.level=INFO, rootLogger.level=INFO" 
       + ", appender.spring.strategy.max=5" 
       + ", appender.remedy.policies.size.size=1MB" 
       + ", logger.application.appenderRefs=application" 
       + ", appender.application.name=application" 
       + ", appender.xmanager.layout.pattern=%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+0} %p %env %appDetail [%t] %l %customInfo%msgInfo %n" 
       + ", appender.spring.name=spring" 
       + ", appender.jdbc.type=RollingFile" 
       + ", appender.jdbc.layout.type=PatternLayout" 
       + ", logger.spring.name=org.springframework" 
       + ", logger.jdbc.appenderRefs=jdbc" 
       + ", logger.scm.name=com.platform" 
       + ", appender.scm.layout.pattern=%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+0} %p %env %appDetail [%t] %l %customInfo%msgInfo %n" 
       + ", property.scmfilename=${sys:ECOMM_HOME}/logs/filename.log, logger.spring.appenderRef.spring.ref=spring" 
       + ", logger.xmanager.level=INFO" 
       + ", appender.xmanager.layout.type=PatternLayout" 
       + ", appender.spring.layout.pattern=%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+0} %p %env %appDetail [%t] %l %customInfo%msgInfo %n" 
       + ", appender.scm.filePattern=${sys:ECOMM_HOME}/logs/filename-%i.log.gz" 
       + ", appender.jdbc.policies.size.type=SizeBasedTriggeringPolicy" 
       + ", logger.config.level=INFO" 
       + ", logger.eventFramework.level=INFO" 
       + ", appender.config.strategy.max=5" 
       + ", appender.config.policies.size.type=SizeBasedTriggeringPolicy" 
       + ", appender.spring.policies.size.type=SizeBasedTriggeringPolicy" 
       + ", logger.remedy.additivity=false, logger.jdbc.level=INFO" 
       + ", appender.scm.type=RollingFile" 
       + ", name=PropertiesConfig" 
       + ", appender.eventFramework.strategy.max=5" 
       + ", appender.scm.strategy.type=DefaultRolloverStrategy" 
       + ", logger.application.name=com.ecommerce.fulfillment" 
       + ", appender.xmanager.fileName=${xmanagerfilename}" 
       + ", appender.scm.fileName=${scmfilename}" 
       + ", rootLogger.appenderRef.application.ref=application" 
       + ", logger.application.additivity=false" 
       + ", appender.spring.filePattern=${sys:ECOMM_HOME}/logs/filename-%i.log.gz" 
       + ", appender.xmanager.type=RollingFile" 
       + ", appender.xmanager.policies.size.type=SizeBasedTriggeringPolicy" 
       + ", appender.jdbc.strategy.type=DefaultRolloverStrategy" 
       + ", appender.eventFramework.fileName=${eventFrameworkfilename}" 
       + ", logger.spring.appenderRefs=spring" 
       + ", appender.config.policies.type=Policies" 
       + ", appender.jdbc.layout.pattern=%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+0} %p %env %appDetail [%t] %l %customInfo%msgInfo %n" 
       + ", appender.jdbc.name=jdbc, appender.xmanager.policies.type=Policies" 
       + ", appender.eventFramework.filePattern=${sys:ECOMM_HOME}/logs/filename-%i.log.gz" 
       + ", appender.jdbc.policies.size.size=3MB" 
       + ", property.configfilename=/log/ecomm-logging/config1.log" 
       + ", appender.console.layout.type=PatternLayout" 
       + ", appender.config.policies.size.size=1MB" 
       + ", appender.spring.policies.size.size=3MB" 
       + ", loggers=application,config,eventFramework,jdbc,remedy,scm,spring,xmanager" 
       + ", logger.scm.appenderRef.scm.ref=scm" 
       + ", appender.config.filePattern=/log/ecomm-logging/config-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz" 
       + ", logger.config.appenderRef.config.ref=config" 
       + ", appender.eventFramework.strategy.type=DefaultRolloverStrategy" 
       + ", appender.scm.name=scm" 
       + ", logger.config.appenderRefs=config" 
       + ", appender.xmanager.policies.size.size=5MB" 
       + ", appender.config.fileName=${configfilename}" 
       + ", appender.jdbc.filePattern=${sys:ECOMM_HOME}/logs/filename-%i.log.gz" 
       + ", appenders=application,config,eventFramework,jdbc,remedy,scm,spring,xmanager" 
       + ", appender.remedy.policies.type=Policies" 
       + ", appender.xmanager.name=xmanager" 
       + ", property.xmanagerfilename=${sys:ECOMM_HOME}/logs/filename.log" 
       + ", logger.spring.level=INFO" 
       + ", appender.application.policies.size.type=SizeBasedTriggeringPolicy" 
       + ", logger.xmanager.appenderRef.xmanager.ref=xmanager" 
       + ", property.filename=/log/ecomm-logging/test.log" 
       + ", logger.eventFramework.appenderRefs=eventFramework" 
       + ", appender.application.strategy.type=DefaultRolloverStrategy" 
       + ", appender.spring.strategy.type=DefaultRolloverStrategy" 
       + ", logger.spring.additivity=false" 
       + ", logger.application.appenderRef.application.ref=application" 
       + ", appender.xmanager.filePattern=${sys:ECOMM_HOME}/logs/filename-%i.log.gz" 
       + ", logger.scm.appenderRefs=scm" 
       + ", appender.scm.strategy.max=5" 
       + ", appender.console.type=Console" 
       + ", logger.eventFramework.additivity=false" 
       + ", appender.application.policies.size.size=5MB" 
       + ", appender.jdbc.strategy.max=5" 
       + ", logger.remedy.appenderRef.remedy.ref=remedy" 
       + ", appender.config.type=RollingFile" 
       + ", appender.eventFramework.type=RollingFile" 
       + ", appender.jdbc.fileName=${jdbcfilename}" 
       + ", logger.scm.additivity=false" 
       + ", property.remedyfilename=${sys:ECOMM_HOME}/logs/filename.log" 
       + ", appender.application.layout.pattern=%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+0} %p %env %appDetail [%t] %l %customInfo%msgInfo %n" 
       + ", logger.config.name=com.ecommerce.fulfillment.common.configuration" 
       + ", logger.xmanager.name=com.ecommerce.fulfillment.common.xmanagerframework" 
       + ", appender.config.strategy.type=DefaultRolloverStrategy" 
       + ", appender.remedy.layout.pattern=%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+0} %p %env %appDetail [%t] %l %customInfo%msgInfo %n" 
       + ", appender.application.layout.type=PatternLayout" 
       + ", appender.remedy.layout.type=PatternLayout" 
       + ", appender.xmanager.strategy.type=DefaultRolloverStrategy" 
       + ", appender.config.layout.pattern=%d{dd/MMM/yyyy HH:mm:ss,SSS}{GMT+0} %p %env %appDetail [%t] %l %customInfo%msgInfo %n" 
       + ", logger.config.additivity=false" 
       + ", appender.console.name=STDOUT" 
       + ", property.jdbcfilename=${sys:ECOMM_HOME}/logs/filename.log" 
       + ", appender.config.name=config" 
       + ", appender.eventFramework.name=eventFramework" 
       + ", appender.xmanager.strategy.max=5" 
       + ", packages=com.ecommerce.logging.plugins" 
       + ", logger.jdbc.name=org.springframework.jdbc.core" 
       + ", appender.remedy.strategy.type=DefaultRolloverStrategy" 
       + ", appender.remedy.strategy.max=5" 
       + ", appender.remedy.type=RollingFile" 
       + ", appender.scm.policies.type=Policies" 
       + ", appender.eventFramework.policies.size.type=SizeBasedTriggeringPolicy" 
       + ", property.springfilename=${sys:ECOMM_HOME}/logs/filename.log"; 
     properties.load(new StringBufferInputStream(str)); 
     System.out.println("Properties -> " + properties.toString()); 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     properties.store(output, null); 
     ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); 
     Configuration conf = null; 
     conf = PropertiesConfigurationFactory.getInstance().getConfiguration(new ConfigurationSource(input)); 
     final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); 
     ctx.start(conf); 
     LOGGER.info("Logging configuration is : {}", ctx); 
    } 
} 
+1

Was ist die Ausgabe Ihrer 'output.toByteArray()'? – aksappy

+0

es ist zu lang fast 190 Zeilen .. Und nichts Verdächtiges –

+0

@aksappy - Ich habe gerade mit dem vollen Klassencode aktualisiert. Ich habe die Lösung, aber immer noch neugierig zu wissen, was schief gelaufen ist, und wenn dies die Begrenzung der 2.5 log4j dann ist, wie nicht früher gemeldet, wie es von vielen verwendet wird und das ist ein häufiges Szenario zu –

Antwort

2

Haben Sie versucht:

PropertiesConfiguration config = new PropertiesConfigurationBuilder().setConfigurationSource(source) 
    .setRootProperties(properties).build(); 
Configurator.initialize(config); 

, die im Wesentlichen ist, was PropertiesConfigurationFactory tut: http://logging.apache.org/log4j/2.x/log4j-core/xref/org/apache/logging/log4j/core/config/properties/PropertiesConfigurationFactory.html

Nachdenken über dieses mehr, kann das Problem sein, den Anruf an LoggerContext.start(Configuration). Stattdessen müssen Sie Configurator.initialize(config) tun.

+0

... Es funktionierte:) !!!!! aber wir müssen immer noch "LoggerContext.start (Configuration)" als Logger Aktion auf der bereitgestellten Konfiguration nicht starten, bis und wir nennen es explizit. Ich habe das getestet und es erstellte die Protokolldateien und reflektierte die Laufzeitänderungen nach dem Aufruf der Startmethode. Auch nur FYI, Mein Code ist in 2.5 und das, was Sie in 2.6 gegeben haben. Ersetzen Sie einfach Ihre letzte Zeile mit dem folgenden Code: final LoggerContext ctx = Configurator.initialize (config); ctx.start (conf); –

+0

... Ich arbeite immer noch an was mit dem reinen Arbeitscode von 2.5 schief gelaufen ist .... Bitte lassen Sie mich wissen, wenn Sie etwas dazu finden konnten, schätzen Sie Ihre Antwort und Mühe :) –

+0

Froh, meine zu hören Antwort war nützlich! –