mongodb - 使用Spring Boot将日志数据存储到MongoDB中
我的项目中需要一个特定的需求是在我的MongoDB数据库中存储日志数据。有很多博客在关系型数据库中存储日志,但我找不到任何与MongoDB一起工作的博客。
经过几个小时的搜索,我找到了这篇Wordpress的文章,但是在实现之后什么都没有发生。博客。https:/assylias.wordpress.com20130322a-simple-logback-appender-for-mongodb?unapproved=1424&moderation-hash=a5ff2a0d2832b77e2d7c0be3173ea667#comment-1424。
但它不工作
问题: 我需要将日志数据持久化到MongoDB中。
有人知道如何用Spring Boot将日志数据追加到MongoDB中吗?
编辑:我已经找到了一种方法,但无论MySQL还是MongoDB,任何类型的数据库都可以做到这一点。我提供了我如何做的答案,但问题仍然是开放的。如果有人知道如何做,请随时回答,如果能成功,我将接受答案。
【回答】:
因此,这里的技巧是制作一个自定义方法,返回一个字符串到Logger类,并将数据保存到数据库(任何数据库关系型或NoSQL并不重要).我将尝试解释整个场景。
这是一个将数据存储到MongoDB的文档。
@Document
public class Logs {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private String id;
private Date date;
private String level;
private String message;
//getters and setters
}
如果你使用的是MySQL,你可以使用@Entity。然后创建这个类的MongoRepository,如果使用JPA则创建CrudRepository。
public interface LogsRepository extends MongoRepository<Logs, String> {
}
现在,你必须制作一个CustomLogger类,用于向数据库中插入数据。
@Component
public class CustomLogger{
@Autowired
MongoTemplate mongoTemplate;
public String info(String message) {
Logs logs = new Logs();
logs.setLevel("ERROR");
logs.setMessage(message);
logs.setDate(new Date());
mongoTemplate.insert(loggerDetail);
return message;
// same for other methods like debug(), error(), etc
}
这里我使用MongoTemplate而不是LogsRepostiry来保存数据,因为Mongo允许插入数据,如果扩展MongoRepository的每一个类。
现在你要做的就是将这个组件自动连接到你使用记录仪的类中。在我的例子中,它是一个控制器。当我打一个API日志会显示在控制台,也会保存到数据库中。
@RestController
public class LogsController {
@Autowired
CustomLogger customLogger;
Logger logger = LoggerFactory.getLogger(CustomLogger.class);
@GetMapping("/logger")
public String basicControllerToSaveData() {
logger.info(customLogger.info("Saving Logs to database"));
return "Success";
}
}
这就可以了!