log4jjava配置有问题

log4jjava配置有问题,java,log4j,config,log4j2,Java,Log4j,Config,Log4j2,我在用Java配置log4j2时遇到了问题 我有一个工作XML配置: <?xml version="1.0" encoding="UTF-8"?> <configuration status="DEBUG"> <appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5

我在用Java配置log4j2时遇到了问题

我有一个工作XML配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="DEBUG">
<appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level - %msg%n" />
    </Console>
    <File name="DM_PREPUB" fileName="logs/41_2015/DM_PREPUB.log">
        <MarkerFilter marker="DM_PREPUB" onMatch="ACCEPT" onMismatch="DENY" />
        <PatternLayout>
            <pattern>%d %p %C{10} [%t] %m%n</pattern>
        </PatternLayout>
    </File>
    <File name="BACKUP" fileName="logs/41_2015/BACKUP.log">
        <MarkerFilter marker="BACKUP" onMatch="ACCEPT" onMismatch="DENY" />
        <PatternLayout>
            <pattern>%d %p %C{10} [%t] %m%n</pattern>
        </PatternLayout>
    </File>
</appenders>
<loggers>
    <logger name="foo.bar" level="DEBUG">
        <appender-ref ref="DM_PREPUB" />
        <appender-ref ref="BACKUP" />
    </logger>
    <root level="ALL">
        <appender-ref ref="Console" />
    </root>
</loggers>
</configuration>
Java配置代码似乎没有那么复杂,这就是为什么我没有设法发现哪里做错了

如果你能帮忙,那太好了

谢谢大家!


erwann

当我遇到类似问题时,对我有效的方法是使用以下命令初始化记录器:

((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)).start(builder.build());
不过我还没有试过你的方法。我的问题是记录器没有写任何东西,在调试时,我发现我使用
builder
提供的配置从未实际使用过,因为Log4j2不知何故决定它已经使用了相同的配置,不需要重新配置


如果上述方法无效,请尝试调试以查看
builder.build()
Configurator.initialize()
中的情况。据我回忆,我的问题是由
AbstractLifeCycle.state
标志引起的,该标志需要处于状态
初始化
,但很快就变成了
启动

我忘了指定,在运行时,文件是正常创建的!但它们仍然是空的,控制台也是空的……您可以使用“编辑”链接将其添加到问题本身,而不是添加到注释中。然后您将标记作为参数登录?(例如logger.info(globalMarker,“ACCEPT 1”)对吗?我可以很好地使用此解决方案!我欠你一个大人情,因为我没有像你那样挣扎。我想我应该先考虑调试。这对我也很有效。我不确定当我尝试使用Configurator.initialize()遵循重新配置示例时,为什么会起作用。)这里:无论我如何配置构建器,它似乎从未工作过,并且始终使用默认配置。
    logger = LogManager.getLogger("foo.bar");
    globalMarker = MarkerManager.getMarker("DM_PREPUB");
((org.apache.logging.log4j.core.LoggerContext) LogManager.getContext(false)).start(builder.build());