上次我在考虑如何在我们的应用程序中正确使用记录器。例如,我有一个控制器,它返回一个用户流,但在日志中,我看到“Fetch users”日志是由另一个线程记录的,而不是处理管道上的线程,但这是一个好的方法吗?
@Slf4j
class AwesomeController {
@GetMapping(path = "/users")
public Flux<User> getUsers() {
log.info("Fetch users..");
return Flux.just(...)..subscribeOn(Schedulers.newParallel("my-custom"));
}
}
在这种情况下,使用了两个线程,从我的角度来看,这不是一个好的选择,但我找不到在反应应用程序中使用记录器的好做法。我认为下面的方法更好,因为分配内存是来自处理线程,而不是来自spring webflux线程,这可能会阻塞但记录器。
@GetMapping(path = "/users")
public Flux<User> getUsers() {
return Flux.defer(() -> {
return Mono.fromCallable(() -> {
log.info("Fetch users..");
.....
})
}).subscribeOn(Schedulers.newParallel("my-custom"))
}
通常要做的事情是将记录器配置为异步(根据注释,这通常必须是显式的,但所有现代日志记录框架都支持它),然后“正常地”包含它(可以像您在这里那样作为单独的一行,或者在副作用方法中,如doonnext()
,如果您希望它在反应链的一半。)
如果您想确保记录器的调用没有阻塞,那么使用BlockHound来确保(无论如何,这从来都不是一个坏主意。)但是在任何情况下,我都看不到第二个示例的用例--这使得代码很难遵循,没有真正的优势。
最后要注意的一点是,请记住,如果您像上面那样单独包含日志语句,而不是作为反应链的一部分,那么它将在调用时而不是订阅时执行方法。在这种情况下,两者几乎同时发生,这可能无关紧要,但如果(例如)返回一个可能订阅多次的发布服务器,则会相当混乱--在这种情况下,您只会看到“Fetch Users...”语句,这在浏览代码时并不明显。
看过本章第一节的同学应该还记得,log_by_lua* 是一个请求经历的最后阶段。由于记日志跟应答内容无关,Nginx 通常在结束请求之后才更新访问日志。由此可见,如果我们有日志输出的情况,最好统一到 log_by_lua* 阶段。如果我们把记日志的操作放在 content_by_lua* 阶段,那么将线性的增加请求处理时间。 在公司某个定制化项目中,Nginx 上的日志内容都要输送到 syslo
需要帮助...我在这里做错了什么???我相信它确实从应用程序属性文件中读取路径和文件名。但我不认为它读取了logback.xml或logback-spring.xml 我做了一些研究,发现了许多问题/答案。但是我想每个人都说要把logback xml放在资源中,把路径和文件名放在application.properties.我知道这很简单,但是在某个地方遗漏了一些东西… 提前谢谢!! 应用程序属性
我有一个使用Spring Boot开发的微服务。应用程序部署在pivotal cloud Foundry。我已经在logback.xml中设置了日志级别,它是应用程序的一部分。为了更改日志级别,我必须更新logback.xml并重新构建/重新部署应用程序。有没有更好的方法做到这一点,而不必重新部署应用程序?有没有办法在PCF中将日志级别设置为env变量?
目前正在使用Spring Boot 2.0.1和Spring Security 5.0.4,用于被动应用程序。 问题是我根本没有任何Spring Security日志。 额外细节: > 我有"logging.level.org.springframework.security=DEBUG"在application.properties.记录器执行器证明了这一点。 由于未经验证的访问正确返回401状
我目前正在使用Azure'Web应用Linux',它利用docker容器通过私有注册表(Azure容器注册表)托管java应用和python应用,我还没有找到收集和分析应用程序日志的方法容器。 目标是通过OMS、application insight或storage analytics分析应用程序日志。我知道“linux上的Web应用程序”仍处于预览状态,但没有关于当前支持哪些功能的官方文档。 A
问题内容: 因此,我有一个在Linux系统上运行的守护程序,我想要记录其活动:日志。问题是,完成此任务的“最佳”方法是什么? 我的第一个想法是简单地打开一个文件并将其写入。 用这种方式记录日志有天生的错误吗?有没有更好的方法,例如Linux内置的某些框架? 问题答案: Unix长期以来一直使用一种称为syslog的特殊日志记录框架。输入您的外壳 您将获得C接口的帮助。 一些 例子