Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Log4J问题->;[致命错误]:1:1:prolog中不允许包含内容_Java_Logging_Configuration_Log4j_Log4j2 - Fatal编程技术网

Java Log4J问题->;[致命错误]:1:1:prolog中不允许包含内容

Java Log4J问题->;[致命错误]:1:1:prolog中不允许包含内容,java,logging,configuration,log4j,log4j2,Java,Logging,Configuration,Log4j,Log4j2,从上周开始,我就犯了一个奇怪的错误。没有任何修改我的代码,这是下面给出的 我讨论了关于同一个错误的SO答案,但大多数答案都涉及xml解析问题,在我的例子中,这根本不是问题 另一件奇怪的事情是,它没有给我堆栈跟踪,为了清晰起见,请读出代码中的注释 private void initializeLoggerContext(Properties properties) throws IOException { System.out.println("initializeLoggerCo

从上周开始,我就犯了一个奇怪的错误。没有任何修改我的代码,这是下面给出的

我讨论了关于同一个错误的SO答案,但大多数答案都涉及xml解析问题,在我的例子中,这根本不是问题

另一件奇怪的事情是,它没有给我堆栈跟踪,为了清晰起见,请读出代码中的注释

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();
        }
    }
我在下面创建了一个带有原始输入属性的示例应用程序,但它在log4j 2.5中仍然失败。当我尝试使用一个键值对的简单属性时,结果也是一样的。请检查以下代码:

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);
    }
}
你试过这个吗:

PropertiesConfiguration config = new PropertiesConfigurationBuilder().setConfigurationSource(source)
    .setRootProperties(properties).build();
Configurator.initialize(config);
这就是PropertiesConfiguration工厂的基本功能:


进一步考虑一下,问题可能是调用
LoggerContext.start(配置)
。相反,您需要执行
Configurator.initialize(config)

您的
output.toByteArray()
的输出是什么?它太长了,几乎有190行..什么都没有suspicious@aksappy-我刚刚更新了完整的类代码。我已经找到了解决方案,但仍然好奇地想知道出了什么问题,如果这是2.5 log4j的限制,那么为什么没有提前报告,因为它被许多人使用,这也是一个常见的场景……它起了作用:)!!!!!但我们仍然需要“LoggerContext.start(Configuration)”,因为记录器不会对提供的配置启动操作,除非我们显式调用它。我对此进行了测试,它正在构建日志文件,并在调用start方法后反映运行时的更改。仅供参考,我的代码在2.5中,你给出的代码在2.6中。用下面给出的代码替换最后一行:final LoggerContext ctx=Configurator.initialize(config);ctx.start(conf);。。。我还在研究2.5的纯工作代码出了什么问题。。。。请让我知道,如果你能找到这方面的任何东西,感谢你的反应和努力:)很高兴听到我的回答是有用的!