我正在尝试使用Log4J Flume appender通过Flume将事件从Log4J 1x获取到HDFS。创建了两个附加器FILE和水槽。它适用于文件附加器,但使用水槽附加器,程序只是挂在Eclipse中。Flume工作正常,我能够使用avro客户端向avro源发送消息并在HDFS中查看消息。但是,它没有与Log4J 1x集成。
我没有看到任何异常,除了下面在log.out中。
Batch size string = null
Using Netty bootstrap options: {tcpNoDelay=true, connectTimeoutMillis=20000}
Connecting to localhost/127.0.0.1:41414
[id: 0x52a00770] OPEN
从水槽控制台
2013-10-23 14:32:32,145 (pool-5-thread-1) [INFO - org.apache.avro.ipc.NettyServer$NettyServerAvroHandler.handleUpstream(NettyServer.java:171)] [id: 0x577cf6e4, /127.0.0.1:46037 => /127.0.0.1:41414] OPEN
2013-10-23 14:32:32,148 (pool-6-thread-1) [INFO - org.apache.avro.ipc.NettyServer$NettyServerAvroHandler.handleUpstream(NettyServer.java:171)] [id: 0x577cf6e4, /127.0.0.1:46037 => /127.0.0.1:41414] BOUND: /127.0.0.1:41414
2013-10-23 14:32:32,148 (pool-6-thread-1) [INFO - org.apache.avro.ipc.NettyServer$NettyServerAvroHandler.handleUpstream(NettyServer.java:171)] [id: 0x577cf6e4, /127.0.0.1:46037 => /127.0.0.1:41414] CONNECTED: /127.0.0.1:46037
2013-10-23 14:32:43,086 (pool-6-thread-1) [INFO - org.apache.avro.ipc.NettyServer$NettyServerAvroHandler.handleUpstream(NettyServer.java:171)] [id: 0x577cf6e4, /127.0.0.1:46037 :> /127.0.0.1:41414] DISCONNECTED
2013-10-23 14:32:43,096 (pool-6-thread-1) [INFO - org.apache.avro.ipc.NettyServer$NettyServerAvroHandler.handleUpstream(NettyServer.java:171)] [id: 0x577cf6e4, /127.0.0.1:46037 :> /127.0.0.1:41414] UNBOUND
2013-10-23 14:32:43,096 (pool-6-thread-1) [INFO - org.apache.avro.ipc.NettyServer$NettyServerAvroHandler.handleUpstream(NettyServer.java:171)] [id: 0x577cf6e4, /127.0.0.1:46037 :> /127.0.0.1:41414] CLOSED
2013-10-23 14:32:43,097 (pool-6-thread-1) [INFO - org.apache.avro.ipc.NettyServer$NettyServerAvroHandler.channelClosed(NettyServer.java:209)] Connection to /127.0.0.1:46037 disconnected.
如果有帮助的话,我确实在调试模式下运行了程序,当它挂起时,我会挂起并进行堆栈跟踪。试图查看代码,但不确定为什么程序会挂起水槽附加器。
Daemon Thread [Avro NettyTransceiver I/O Worker 1] (Suspended)
Logger(Category).callAppenders(LoggingEvent) line: 205
Logger(Category).forcedLog(String, Priority, Object, Throwable) line: 391
Logger(Category).log(String, Priority, Object, Throwable) line: 856
Log4jLoggerAdapter.debug(String) line: 209
NettyTransceiver$NettyClientAvroHandler.handleUpstream(ChannelHandlerContext, ChannelEvent) line: 491
DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline$DefaultChannelHandlerContext, ChannelEvent) line: 564
DefaultChannelPipeline$DefaultChannelHandlerContext.sendUpstream(ChannelEvent) line: 792
NettyTransportCodec$NettyFrameDecoder(SimpleChannelUpstreamHandler).channelBound(ChannelHandlerContext, ChannelStateEvent) line: 166
NettyTransportCodec$NettyFrameDecoder(SimpleChannelUpstreamHandler).handleUpstream(ChannelHandlerContext, ChannelEvent) line: 98
DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline$DefaultChannelHandlerContext, ChannelEvent) line: 564
DefaultChannelPipeline.sendUpstream(ChannelEvent) line: 559
Channels.fireChannelBound(Channel, SocketAddress) line: 199
NioWorker$RegisterTask.run() line: 191
NioWorker(AbstractNioWorker).processRegisterTaskQueue() line: 329
NioWorker(AbstractNioWorker).run() line: 235
NioWorker.run() line: 38
DeadLockProofWorker$1.run() line: 42
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1145
ThreadPoolExecutor$Worker.run() line: 615
Thread.run() line: 744
这是Java程序
import java.io.IOException;
import java.sql.SQLException;
import org.apache.log4j.Logger;
public class log4jExample {
static Logger log = Logger.getRootLogger();
public static void main(String[] args) throws IOException, SQLException {
log.debug("Hello this is an debug message");
}
}
下面是log4j.properties
# Define the root logger with appender file
log = /home/vm4learning/WorkSpace/BigData/Log4J-Example/log
log4j.rootLogger = DEBUG, FILE, flume
# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n
# Define the flume appender
log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
log4j.appender.flume.Hostname = localhost
log4j.appender.flume.Port = 41414
log4j.appender.flume.UnsafeMode = false
log4j.appender.flume.layout=org.apache.log4j.PatternLayout
log4j.appender.flume.layout.ConversionPattern=%m%n
以下是Eclipse中的依赖项
flume-ng-log4jappender-1.4.0.jar
log4j-1.2.17.jar
flume-ng-sdk-1.4.0.jar
avro-1.7.3.jar
netty-3.4.0.Final.jar
avro-ipc-1.7.3.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
以下是flume.conf的内容
# Tell agent1 which ones we want to activate.
agent1.channels = ch1
agent1.sources = avro-source1
agent1.sinks = hdfs-sink1
# Define a memory channel called ch1 on agent1
agent1.channels.ch1.type = memory
# Define an Avro source called avro-source1 on agent1 and tell it
# to bind to 0.0.0.0:41414. Connect it to channel ch1.
agent1.sources.avro-source1.type = avro
agent1.sources.avro-source1.bind = 0.0.0.0
agent1.sources.avro-source1.port = 41414
# Define a logger sink that simply logs all events it receives
# and connect it to the other end of the same channel.
agent1.sinks.hdfs-sink1.type = hdfs
agent1.sinks.hdfs-sink1.hdfs.path = hdfs://localhost:9000/flume/events/
agent1.sinks.hdfs-sink1.channel = ch1
agent1.sources.avro-source1.channels = ch1
如何解决这个问题?
我曾经在log4j中使用Flume附加器时遇到过类似的问题。每当我尝试实例化 Logger 对象时,程序都会挂起。我记得问题是我在类路径中没有所有必需的库,一旦我添加了它们,它就可以正常工作。
我建议你先从迈克·珀西的简单例子开始。虽然pom.xml那里创建了一个包含所有依赖项的JAR,但编辑它以将依赖的jar文件复制到另一个目录会给我这个列表:
avro-1.7.4.jar
avro-ipc-1.7.4.jar
commons-codec-1.3.jar
commons-collections-3.2.1.jar
commons-compress-1.4.1.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
flume-ng-log4jappender-1.4.0-cdh4.5.0.jar
flume-ng-sdk-1.4.0-cdh4.5.0.jar
hamcrest-core-1.1.jar
httpclient-4.0.1.jar
httpcore-4.0.1.jar
jackson-core-asl-1.8.8.jar
jackson-mapper-asl-1.8.8.jar
jetty-6.1.26.jar
jetty-util-6.1.26.jar
junit-4.10.jar
libthrift-0.7.0.jar
log4j-1.2.16.jar
netty-3.5.0.Final.jar
paranamer-2.3.jar
slf4j-api-1.7.2.jar
slf4j-jdk14-1.7.2.jar
snappy-java-1.0.4.1.jar
velocity-1.7.jar
xz-1.0.jar
其中一些库(如jUnit)可能并不是真正必要的,但我建议首先使用所有这些库,看看您是否可以让您的示例正常工作,然后尝试确定所需的最小集。
我的猜测是,您正在尝试通过Flume记录Flume的事件。我已经在其他附加器中看到过这个问题,但在 Log4j1 上没有。
我会考虑修改log4j.properties以排除Flume,Netty和Avro事件,看看是否可以修复它。
我也遇到过类似的问题,解决方法是:
但是我不知道水槽里发生了什么。我正在尝试调试它。如果有人知道,告诉我谢谢~~
我最近在scala代码中使用DirectByteBuffer时遇到了一个问题。下面是我的代码。 在整个循环中,ByteBuffer.remance()总是返回40,看起来“put()”调用从未起作用。因此,在执行“get()”时,缓冲区的内容始终为0。 即使get()调用也根本不移动索引。
我有一个将文件上载到aws S3的应用程序,从我的本地工作正常,但当我将应用程序上载到Elastic Beanstalk并尝试上载文件时,应用程序失败,并返回一个文本413请求实体过大的错误。我的应用程序使用Spring Boot和Spring cloud,我的应用程序属性为: 有人知道这个问题吗?
我正在GKE上创建一个nginx入口。 在每次重新加载事件中,我的控制器打印到日志: I1019 13:23:31.679126 6控制器。go:145]“检测到配置更改,需要后端重新加载”I1019 13:23:31.776558 6控制器。转到:162]“后端成功重新加载”I1019 13:23:31.776897 6事件。go:282]事件(v1.ObjectReference{种类:“Po
我试图写一个日志文件使用slf4j与log4j.我可以看到控制台中的日志。但它没有写入日志文件 这是我的log4js属性文件 我已经包括了slf4j-api-1.7。5.jar,slf4j-log4j12-1.7。5和log4j-1.2。8.jar在我的类路径中。 我用下面的方法写日志。 任何帮助我都将不胜感激。谢谢
问题内容: 我无法用自己的数据填充JavaFX TableView对象。我试图修改此处找到的代码以适合我的程序的需求。我添加了该教程中使用的表,它可以正确显示。我复制了该代码以创建第二个表,但是无法使我的数据显示在第二个表中。 我相信我已经正确修改了代码以接受来自SNMPInterface类的数据。我尝试用静态数据填充表,然后再使用从文件读取的数据填充表。尽管这两个过程都将创建具有适当标题的列,但
有一个spring boot应用程序,我尝试在S3目标存储桶的文件夹中放置一个文件。目标bucket/targetsystem文件夹/文件。csv 将从yml配置文件检索的每个文件的targetsystem文件夹名称将不同。 如果该文件夹未退出,则必须通过代码创建targetsystem文件夹,并将文件放在该文件夹下 据我所知,在S3桶中没有文件夹概念,所有文件都存储为对象。 阅读了一些文档,比如