log4j:ERROR Flume append() failed.(flume-ng-log4jappender-1.4.0.jar bug)
来源:互联网 发布:网络招聘平台分析报告 编辑:程序博客网 时间:2024/05/29 07:23
日志出现“log4j:ERROR Flume append() failed.”,发现flume-ng-log4jappender-1.4.0有一个bug。详细,请查阅:https://issues.apache.org/jira/browse/FLUME-2186。
解决方法:修改flume-ng-log4jappender中的append方法。修改为:
@Override public synchronized void append(LoggingEvent event) throws FlumeException{ //If rpcClient is null, it means either this appender object was never //setup by setting hostname and port and then calling activateOptions //or this appender object was closed by calling close(), so we throw an //exception to show the appender is no longer accessible. boolean ready = true; String errorMsg = "Cannot Append to Appender! Appender either closed or" + " not setup correctly!"; if (rpcClient == null) { LogLog.error(errorMsg); if (unsafeMode) { activateOptions(); if(rpcClient == null || !rpcClient.isActive()) { ready = false; } }else { throw new FlumeException(errorMsg); } } if(unsafeMode && !ready) { return; } if(!rpcClient.isActive()){ reconnect(); } if(rpcClient == null || !rpcClient.isActive()) { if(unsafeMode) { return; } else { LogLog.error(errorMsg); throw new FlumeException(errorMsg); } } //Client created first time append is called. Map<String, String> hdrs = new HashMap<String, String>(); hdrs.put(Log4jAvroHeaders.LOGGER_NAME.toString(), event.getLoggerName()); hdrs.put(Log4jAvroHeaders.TIMESTAMP.toString(), String.valueOf(event.getTimeStamp())); //To get the level back simply use //LoggerEvent.toLevel(hdrs.get(Integer.parseInt( //Log4jAvroHeaders.LOG_LEVEL.toString())) hdrs.put(Log4jAvroHeaders.LOG_LEVEL.toString(), String.valueOf(event.getLevel().toInt())); Event flumeEvent; Object message = event.getMessage(); if (message instanceof GenericRecord) { GenericRecord record = (GenericRecord) message; populateAvroHeaders(hdrs, record.getSchema(), message); flumeEvent = EventBuilder.withBody(serialize(record, record.getSchema()), hdrs); } else if (message instanceof SpecificRecord || avroReflectionEnabled) { Schema schema = ReflectData.get().getSchema(message.getClass()); populateAvroHeaders(hdrs, schema, message); flumeEvent = EventBuilder.withBody(serialize(message, schema), hdrs); } else { hdrs.put(Log4jAvroHeaders.MESSAGE_ENCODING.toString(), "UTF8"); String msg = layout != null ? layout.format(event) : message.toString(); flumeEvent = EventBuilder.withBody(msg, Charset.forName("UTF8"), hdrs); } try { rpcClient.append(flumeEvent); } catch (EventDeliveryException e) { String msg = "Flume append() failed."; LogLog.error(msg); if (unsafeMode) { return; } throw new FlumeException(msg + " Exception follows.", e); } }
0 0
- log4j:ERROR Flume append() failed.(flume-ng-log4jappender-1.4.0.jar bug)
- Flume客户端flume-ng-log4jappender 负载平衡(LoadBalancingLog4jAppender)
- Flume之Log4JAppender接收Log4j日志
- log4j集成flume-ng
- Flume OG & Flume NG
- flume-ng 实际应用例子,flume采集log4j日志
- flume-ng
- Flume NG
- flume ng
- Flume-ng
- flume-ng 1.4的安装
- flume log4j
- log4j + flume
- log4j flume
- log4j ----->flume
- flume OG VS flume NG
- flume error
- log4j输出日志到flume-ng(个人记录)
- hdu 2138 How many prime numbers_Miller-Rabin算法模板
- GitHub使用教程
- RunTime-消息的拦截与替换
- 某公司3531板子调试笔记
- POJ 3295 Tautology
- log4j:ERROR Flume append() failed.(flume-ng-log4jappender-1.4.0.jar bug)
- c++模板类
- You can Solve a Geometry Problem too
- ejarmaker: jar 、java类的加密工具
- IOS APP 企业下载模式在7.1 上提示证书 问题
- EditText中imeOptions属性使用及设置无效解决
- 计数排序(第8章线性时间排序)
- Java NIO使用及原理分析(二)
- Eclipse 在开发中使用到的快捷键(转载)