英文:
Producer with name is already connected to topic when using Pulsar appender with Ignite logger
问题
I have translated the code-related portions of your text. Here they are:
我有一个复杂的项目,使用Ignite,并安装了Ignite版本的log4j2。
我还想安装[Pulsar appender](https://github.com/apache/pulsar/tree/master/pulsar-log4j2-appender/src/main/java/org/apache/pulsar/log4j2/appender)来记录log4j2,但是,当我启动应用程序时,我得到以下错误:
log4j:WARN No appenders could be found for logger (org.apache.pulsar.shade.io.netty.util.internal.logging.InternalLoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
2020-07-28 15:58:47,732 main ERROR Failed to start pulsar manager org.apache.pulsar.client.api.PulsarClientException$ProducerBusyException: Producer with name 'pulsar-log4j2-appender-json_persistor4' is already connected to topic
at org.apache.pulsar.client.api.PulsarClientException.unwrap(PulsarClientException.java:849)
at org.apache.pulsar.client.impl.ProducerBuilderImpl.create(ProducerBuilderImpl.java:93)
at org.apache.pulsar.log4j2.appender.PulsarManager.startup(PulsarManager.java:127)
at org.apache.pulsar.log4j2.appender.PulsarAppender.start(PulsarAppender.java:187)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:266)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:548)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:620)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:637)
at org.apache.ignite.logger.log4j2.Log4J2Logger$5.apply(Log4J2Logger.java:405)
at org.apache.ignite.logger.log4j2.Log4J2Logger$5.apply(Log4J2Logger.java:402)
at org.apache.ignite.logger.log4j2.Log4J2Logger.addConsoleAppenderIfNeeded(Log4J2Logger.java:302)
at org.apache.ignite.logger.log4j2.Log4J2Logger.setNodeId(Log4J2Logger.java:402)
at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.initLogger(IgnitionEx.java:2568)
at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.initializeConfiguration(IgnitionEx.java:2206)
at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1697)
at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1117)
at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:637)
at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:563)
at org.apache.ignite.Ignition.start(Ignition.java:321)
at com.coinflex.service.release.ReleaseApplication.main(ReleaseApplication.java:39)
显然,这两个依赖项之间存在冲突。在导入Pulsar appender到我的**pom.xml**时,我已经排除了大多数依赖项,但是:
<dependencies>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-spring</artifactId>
<version>${ignite.version}</version>
</dependency>
<!-- 其他依赖项 -->
<!-- Pulsar logging -->
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-log4j2-appender</artifactId>
<version>2.6.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
<!-- 其他排除项 -->
</exclusions>
</dependency>
</dependencies>
Please note that this is the translated code portion. If you have any other specific translation requests or questions, feel free to ask.
英文:
I have a complex project that uses Ignite and has the Ignite version of log4j2 installed.
I'd also like to install a Pulsar appender to log4j2, however, when I start up the application, I get the following error:
log4j:WARN No appenders could be found for logger (org.apache.pulsar.shade.io.netty.util.internal.logging.InternalLoggerFactory).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
2020-07-28 15:58:47,732 main ERROR Failed to start pulsar manager org.apache.pulsar.client.api.PulsarClientException$ProducerBusyException: Producer with name 'pulsar-log4j2-appender-json_persistor4' is already connected to topic
at org.apache.pulsar.client.api.PulsarClientException.unwrap(PulsarClientException.java:849)
at org.apache.pulsar.client.impl.ProducerBuilderImpl.create(ProducerBuilderImpl.java:93)
at org.apache.pulsar.log4j2.appender.PulsarManager.startup(PulsarManager.java:127)
at org.apache.pulsar.log4j2.appender.PulsarAppender.start(PulsarAppender.java:187)
at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:266)
at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:548)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:620)
at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:637)
at org.apache.ignite.logger.log4j2.Log4J2Logger$5.apply(Log4J2Logger.java:405)
at org.apache.ignite.logger.log4j2.Log4J2Logger$5.apply(Log4J2Logger.java:402)
at org.apache.ignite.logger.log4j2.Log4J2Logger.addConsoleAppenderIfNeeded(Log4J2Logger.java:302)
at org.apache.ignite.logger.log4j2.Log4J2Logger.setNodeId(Log4J2Logger.java:402)
at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.initLogger(IgnitionEx.java:2568)
at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.initializeConfiguration(IgnitionEx.java:2206)
at org.apache.ignite.internal.IgnitionEx$IgniteNamedInstance.start(IgnitionEx.java:1697)
at org.apache.ignite.internal.IgnitionEx.start0(IgnitionEx.java:1117)
at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:637)
at org.apache.ignite.internal.IgnitionEx.start(IgnitionEx.java:563)
at org.apache.ignite.Ignition.start(Ignition.java:321)
at com.coinflex.service.release.ReleaseApplication.main(ReleaseApplication.java:39)
Clearly, there is a clash between the two dependencies. I have excluded most when I imported Pulsar appender to my pom.xml however:
<dependencies>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-spring</artifactId>
<version>${ignite.version}</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-zookeeper</artifactId>
<version>${ignite.version}</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-urideploy</artifactId>
<version>${ignite.version}</version>
</dependency>
<dependency>
<groupId>org.apache.ignite</groupId>
<artifactId>ignite-log4j2</artifactId>
<version>${ignite.version}</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client</artifactId>
<version>${pulsar.version}</version>
</dependency>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.3.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<!-- Pulsar logging -->
<dependency>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-log4j2-appender</artifactId>
<version>2.6.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.pulsar</groupId>
<artifactId>pulsar-client</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
And this is what my log4j2.xml looks like:
<Configuration monitorInterval="60">
<Appenders>
<Console name="CONSOLE" target="SYSTEM_OUT">
<PatternLayout pattern="%d{hh:mm:ss,SSS} [%t] %-5p %c %x - %m%n"/>
<ThresholdFilter level="ERROR" onMatch="DENY" onMismatch="ACCEPT"/>
</Console>
<Console name="CONSOLE_ERR" target="SYSTEM_ERR">
<PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/>
</Console>
<Routing name="FILE">
<Routes pattern="$${sys:nodeId}">
<Route>
<RollingFile name="Rolling-${sys:nodeId}" fileName="ignite/work/log/ignite-${sys:nodeId}.log"
filePattern="ignite/work/log/ignite-${sys:nodeId}-%i-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="[%d{ISO8601}][%-5p][%t][%c{1}]%notEmpty{[%markerSimpleName]} %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="6" modulate="true" />
<SizeBasedTriggeringPolicy size="10 MB" />
</Policies>
</RollingFile>
</Route>
</Routes>
</Routing>
<Pulsar name="PULSAR" serviceUrl="pulsar://172.21.11.82:6650" topic="json_persistor" avoidRecursive="false">
<PatternLayout pattern="%msg%n"/>
</Pulsar>
</Appenders>
<Loggers>
<Logger name="org.apache.ignite" level="ERROR"/>
<Logger name="org.springframework" level="WARN"/>
<Logger name="org.eclipse.jetty" level="WARN"/>
<Logger name="org.eclipse.jetty.util.log" level="ERROR"/>
<Logger name="org.eclipse.jetty.util.component" level="ERROR"/>
<Logger name="com.amazonaws" level="WARN"/>
<Root level="INFO">
<AppenderRef ref="CONSOLE" level="INFO"/>
<AppenderRef ref="CONSOLE_ERR" level="ERROR"/>
<AppenderRef ref="FILE" level="DEBUG"/>
</Root>
</Loggers>
</Configuration>
答案1
得分: 2
问题不在于log4j的依赖关系,而是与试图连接到Pulsar主题的生产者发生了名称冲突。堆栈跟踪显示“Producer with name 'pulsar-log4j2-appender-json_persistor4' is already connected to topic”,我假设这是您的应用程序用于一个生产者的名称。
因此,您只需要停止先前运行的应用程序实例,以终止现有的生产者,以便新的生产者可以连接。
一个长期的解决方案是避免显式命名您的生产者,让Pulsar为您处理。然后名称将保证是唯一的。有关更多详细信息,请参阅https://stackoverflow.com/questions/63258912/is-it-possible-to-have-multiple-producers-for-the-same-topic-on-pulsar。
英文:
The issue isn't with the log4j dependencies, but rather with a name conflict with the producer that is trying to connect to the Pulsar topic. The stack trace says "Producer with name 'pulsar-log4j2-appender-json_persistor4' is already connected to topic", which I assume is the name your application uses for one of the producers.
Therefore, you simply need to stop the previously running instance of the application in order to terminate the existing producer so that the new one can connect.
An long-term solution is to avoid explicitly naming your producers and allow Pulsar to handle that for you. Then the names are guaranteed to be unique. See https://stackoverflow.com/questions/63258912/is-it-possible-to-have-multiple-producers-for-the-same-topic-on-pulsar for more details
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论