Logging 在CF或Heroku中部署的Spring Boot应用程序中如何以及在何处存储日志文件?
我创建了一个JHipster webapp(SpringBoot&Angular Js),并将其部署在Pivotal CF和Heroku上 我将日志文件保存在Logging 在CF或Heroku中部署的Spring Boot应用程序中如何以及在何处存储日志文件?,logging,heroku,spring-boot,jhipster,cloud-foundry,Logging,Heroku,Spring Boot,Jhipster,Cloud Foundry,我创建了一个JHipster webapp(SpringBoot&Angular Js),并将其部署在Pivotal CF和Heroku上 我将日志文件保存在src/main/webapp/logs/目录下,该目录在localhost中运行良好,但在Pivotal CF和Heroku中部署时,我收到以下错误消息 对不起,发生了一个错误 状态:未找到(未找到) 消息:没有可用消息 问题: 我可以查看日志文件列表,并在localhost中下载或查看日志文件的内容,但在CF或Heroku中部署时,我只
src/main/webapp/logs/
目录下,该目录在localhost中运行良好,但在Pivotal CF和Heroku中部署时,我收到以下错误消息
对不起,发生了一个错误
状态:未找到(未找到)
消息:没有可用消息
问题:
src/main/webapp/logs/
目录中的日志文件名列表
@RequestMapping(value = "/logs/files",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public List<String> getLogFileNames() throws IOException {
Resource resource = resourceLoader.getResource("file:src/main/webapp/logs");
System.out.println("resource : "+ resource);
File file = resource.getFile();
File[] listFiles = file.listFiles();
List<String> fileNames = new ArrayList<>();
List<File> list = Arrays.asList(listFiles);
for (File f : list) {
System.out.println(f.getName());
fileNames.add(f.getName());
}
return fileNames;
}
logs.html:
<form class="form-inline">
<div class="form-group">
<div class="dropdown">
<button class="btn btn-success btn-md dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Click to Open Log Files
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li ng-repeat="(key, value) in logFileNames" value="{{value}}" style="width:100%;">
<a ng-href="/logs/{{value}}" target="_blank"><strong>{{value}}</strong> </a>
</li>
</ul>
</div>
</div>
</form>
单击以打开日志文件
-
在cloud foundry环境中,应用程序实例在容器中运行。在PCF中,容器是一个花园单元。该单元拥有的存储称为“临时存储”。这意味着,只要容器处于活动状态,应用程序就拥有存储空间
如果应用程序实例死亡,云计算将销毁容器。这包括临时存储。当一个新的应用实例启动时,它的容器将拥有全新的存储空间,同样是短暂的
这就是为什么在CloudFoundry中,您的应用程序不能在运行时依赖本地文件系统
请查看“12因素应用程序”文档()。它将在开发云本地应用程序时派上用场。在学习了Docker的概念后,我意识到“如果应用程序实例死亡…”对PCF和Heroku也是如此。那么,如何存储日志呢?“12因素应用程序”说只需将日志整理出来。如何配置其他工具(如Splunk或ElasticSearch)来捕获日志?任何参考链接?PCF提供<代码> LogGReGuase<代码>组件,用于从基础组件中收集所有组件和应用程序的日志。这里有一个链接到解释它的文章-。所有日志都通过称为“消防软管”的端点暴露出来。要捕获日志,请安装“喷嘴”。部署到cloud foundry后,一个“喷嘴”应用程序连接到“消防软管”并将日志转发到Splunk或Kafka bridge。您可以做的另一件事是安装
消防软管插件
。它将允许您在现场查看生成的日志,并让您了解什么是消防水龙带。
angular.module('blogaggrApp')
.factory('LogsFileNameService', function ($resource) {
return $resource('api/logs/files', {}, {
'getLogFileNames': { method: 'GET', isArray: true}
});
});
<form class="form-inline">
<div class="form-group">
<div class="dropdown">
<button class="btn btn-success btn-md dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Click to Open Log Files
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
<li ng-repeat="(key, value) in logFileNames" value="{{value}}" style="width:100%;">
<a ng-href="/logs/{{value}}" target="_blank"><strong>{{value}}</strong> </a>
</li>
</ul>
</div>
</div>
</form>