我正在尝试将fluent-logger-java与带有logback appender的springboot项目集成。我可以使用https://github.com/fluent/fluent-logger-java
中给出的示例代码将数据发送到流畅的聚合器但是当作为logback appender添加时,它会抛出NullPointerException。 我曾尝试使用https://mvnrepository.com/artifact/com.sndyuk/logback-more-appenders/1.4.3中的logback-more-appenders。 但它不是从应用程序发送任何数据。
要重现此问题,请使用默认值从https://start.spring.io/生成一个简单的Web项目。
将src \ main \ java \ com \ example \ demo \ FluentLogbackAppender.java添加到项目中
private void DeleteButtonActionPerformed(java.awt.event.ActionEvent evt) {
String sql1=("Delete From Mory.Boats Where DATE_OF_TRIP='?' and BOAT_NAME='?'");
try {
myconobj=DriverManager.getConnection("jdbc:derby://localhost:1527/New_Idea","Mory","Mory");
PreparedStatement ps = myconobj.prepareStatement(sql1);
ps.setString(1,Date_of_TripDateChooser.getDateFormatString());
ps.setString(2,Boat_NameTextField.getText());
mystmobj=myconobj.createStatement();
mystmobj.toString();
mystmobj.execute(sql1);
((DefaultTableModel)Boats1.getModel()).removeRow(Boats1.getSelectedRow());
ps.execute();
JOptionPane.showMessageDialog(null, "Deleted");
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, ex);
}
}
}
将src \ main \ resources \ logback.xml添加到项目
package com.example.demo;
import java.util.HashMap;
import java.util.Map;
import org.fluentd.logger.FluentLogger;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.core.UnsynchronizedAppenderBase;
public class FluentLogbackAppender extends UnsynchronizedAppenderBase<ILoggingEvent> {
private FluentLogger fluentLogger;
private String label = "test";
@Override
public void start() {
super.start();
this.fluentLogger = FluentLogger.getLogger(label, "localhost", 24224);
Map<String, Object> data = new HashMap<String, Object>();
data.put("msg", "Starting App");
fluentLogger.log(label, data);
}
@Override
protected void append(ILoggingEvent rawData) {
String msg = rawData.toString();
Map<String, Object> data = new HashMap<String, Object>(1);
data.put("msg", msg);
fluentLogger.log(label, data);
}
@Override
public void stop() {
super.stop();
fluentLogger.close();
}
}
在pom.xml中添加依赖项
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE logback>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<appender name="fluent" class="com.example.demo.FluentLogbackAppender"/>
<root level="info" additivity="false">
<appender-ref ref="fluent" />
</root>
</configuration>
我删除了一些代码以简化它。 运行时,我会看到
<dependency>
<groupId>org.fluentd</groupId>
<artifactId>fluent-logger</artifactId>
<version>0.3.3</version>
</dependency>
从FluentLogger类中的sender.emit()返回NullPointerException。 有趣的是,这段代码实际上在崩溃之前将数据推送到流畅的聚合器。 有没有办法让这项工作。
答案 0 :(得分:2)
我猜,您没有在此处粘贴完整的代码。我认为您的班级可能在标签字段上使用了吸气剂,吸气剂。如果是这样,则您的登录配置丢失了<tag>test</tag>
,这可能是原因(仍要猜测)。 FluentLogger存在许多未解决的问题,建议使用fluency客户端库来刷新要流利的数据。
一些参考- https://github.com/fluent/fluent-logger-java/issues/72