9阅网

您现在的位置是:首页 > 知识 > 正文

知识

mongodb - 使用Spring Boot将日志数据存储到MongoDB中

admin2022-11-04知识19

我的项目中需要一个特定的需求是在我的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";
}
}

这就可以了!