Log4J Appender直接写到Flume
使用log4j Appender输出日志到Flume Agent 的avro source上。使用的时候log4j客户端必须要在classpath引入flume-ng-sdk(比如:flume-ng-sdk-1.8.0.jar).必需的参数已用 粗体 标明。
提示
说白了就是用log4j直接将日志内容发送到Flume,简化了先写入到日志,再由Flume收集的过程。
属性 | 默认值 | 解释 |
---|---|---|
Hostname | – | 远程运行着avro source的Flume Agent的hostname |
Port | – | 上面这个Flume Agent 的avro source监听的端口 |
UnsafeMode | false | 如果为true,log4j的appender在发送Event失败时不会抛出异常 |
AvroReflectionEnabled | false | 是否使用Avro反射来序列化log4j的Event(当log是字符串时不要开启) |
AvroSchemaUrl | – | 一个能检索到Avro结构的url |
log4j.properties 文件配置范例:
- #...
- log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
- log4j.appender.flume.Hostname = example.com
- log4j.appender.flume.Port = 41414
- log4j.appender.flume.UnsafeMode = true
- # 指定一个类的logger输出到Flume appender上
- log4j.logger.org.example.MyClass = DEBUG,flume
- #...
默认情况下,每一个Event都会通过调用 toString()方法或者log4j的layout(如果配置了的话)转换成一个字符串。
如果Event是 org.apache.avro.generic.GenericRecord 或 org.apache.avro.specific.SpecificRecord 的一个实例,又或者 AvroReflectionEnabled 属性设置为 true
,Event会使用Avro序列化器来序列化。
使用Avro序列化每个Event效率很低,因此最好提供一个avro schema的URL,可以被 downstream sink(通常是HDFS sink)从该URL检索schema。 如果未指定 AvroSchemaUrl,则schema将作为Flume header包含在内。
使用Avro序列化Event的log4j.properties配置范例:
- #...
- log4j.appender.flume = org.apache.flume.clients.log4jappender.Log4jAppender
- log4j.appender.flume.Hostname = example.com
- log4j.appender.flume.Port = 41414
- log4j.appender.flume.AvroReflectionEnabled = true
- log4j.appender.flume.AvroSchemaUrl = hdfs://namenode/path/to/schema.avsc
- # 指定一个类的logger输出到flume appender上
- log4j.logger.org.example.MyClass = DEBUG,flume
- #...
当前内容版权归 liyifeng 译 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 liyifeng 译 .