热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【AzureSpringCloud】AzureSpringCloud服务,如何获取应用程序日志文件呢?

问题描述在使用AzureSpringCloud服务时,如果要收集应用程序的日志。有控制台输出(实时流日志),也可以配置LogAnalytics服务。日志流式处理可以通过以下命令在A

问题描述

在使用Azure Spring Cloud服务时,如果要收集应用程序的日志。有控制台输出(实时流日志),也可以配置Log Analytics服务。


日志流式处理

可以通过以下命令在 Azure CLI 中使用日志流式处理。

az spring-cloud app logs -n hellospring -s yourspringcloudname -g --lines 100 -f


Log Analytics

在Azure Spring Cloud门户页面,转到“服务 | 概述”页,然后在“监视”部分中选择“日志” 。 选择 Azure Spring Cloud 的一个示例查询上的“运行”。

但是,如果应用中需要自行把日志写入到日志文件中,那么如果应用部署到Azure Spring Cloud 上后,如何来查看并获取到应用程序自身专门用于记录日志的文件呢? 

 


问题解答

Azure Spring Cloud 与 App Service有较大的区别。App Service可以通过Kudu工具访问应用的文件系统,就可以在Home目录下直接看见应用程序生成的日志文件并下载。

而Spring Cloud服务,需要通过文件挂载(Mount)的方式,把一个存储账号(Storage Account)挂载到Spring Cloud的App上。  


挂载Storage Account以及在代码中配置挂载后的日志路径步骤:


第一步:为Azure Spring Cloud服务添加一个Storage



  • Storage name:为自定义名称,根据自己情况设定,如 springstorage01

  • Account name:为存储账号(Storage Account)的名称,需要从Azure Storage Account的页面中获取

  • Account Key:从Azure Storage Account的Access Key页面中获取。注意:此处只需要填写Access Key就可以,不需要完整的Conneciton String

 


第二步:为Spring Cloud App添加挂载

在Spring Cloud页面,点击“Apps”列举出所有的App。选中需要配置日志文件路径的应用。然后选择“Configuration” --> "Persistent Storage"



  • Storage Name:为第一步中自定义的Storage Name。

  • Share Name:为在Azure Storage Account的文件共享中所创建的一个共享文件夹。可以自定义文件夹名称。

  • Mount Path: 所挂载Spring Cloud App所运行实例上的文件路径。这一步的内容也是将在应用为日志文件所配置的存放路径。非常关键!如使用 /app/logs

 


第三步:在Java Spring应用中重新配置日志生成路径

修改应用中的日志保存路径。如本实例中使用的 logback-spring.xml 。 修改文件输出路径为: /app/logs/test.log

重新生成Jar文件并再次发布。

 


第四步: 在存储账号中检查应用日志

在Azure门户中,进入Storage Account中,查看Spring Cloud App的运行日志。如下:

 

 

 


附录:Spring Cloud应用示例代码

POM.XML 依赖包文件

xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation
="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<parent>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-parentartifactId>
<version>2.6.11version>
<relativePath/>
parent>
<groupId>com.examplegroupId>
<artifactId>hellospringartifactId>
<version>0.0.1-SNAPSHOTversion>
<name>hellospringname>
<description>Demo project for Spring Bootdescription>
<properties>
<java.version>1.8java.version>
<spring-cloud.version>2021.0.3spring-cloud.version>
properties>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-configartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
<scope>testscope>
dependency>
<dependency>
<groupId>net.logstash.logbackgroupId>
<artifactId>logstash-logback-encoderartifactId>
<version>6.5version>
dependency>
dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>${spring-cloud.version}version>
<type>pomtype>
<scope>importscope>
dependency>
dependencies>
dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
plugin>
plugins>
build>
project>

 

application.properties 配置文件

spring.cloud.config.enabled=false

 

logback-spring.xml配置文件

<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<fieldName>timestampfieldName>
<timeZone>UTCtimeZone>
timestamp>
<loggerName>
<fieldName>loggerfieldName>
loggerName>
<logLevel>
<fieldName>levelfieldName>
logLevel>
<threadName>
<fieldName>threadfieldName>
threadName>
<nestedField>
<fieldName>mdcfieldName>
<providers>
<mdc />
providers>
nestedField>
<stackTrace>
<fieldName>stackTracefieldName>

<throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
<maxDepthPerThrowable>200maxDepthPerThrowable>
<maxLength>14000maxLength>
<rootCauseFirst>truerootCauseFirst>
throwableConverter>
stackTrace>
<message />
<throwableClassName>
<fieldName>exceptionClassfieldName>
throwableClassName>
providers>
encoder>
appender>
<appender name="files" class="ch.qos.logback.core.FileAppender">
<file>/app/logs/test.logfile>
<append>trueappend>
<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<fieldName>timestampfieldName>
<timeZone>UTCtimeZone>
timestamp>
<loggerName>
<fieldName>loggerfieldName>
loggerName>
<logLevel>
<fieldName>levelfieldName>
logLevel>
<threadName>
<fieldName>threadfieldName>
threadName>
<nestedField>
<fieldName>mdcfieldName>
<providers>
<mdc />
providers>
nestedField>
<stackTrace>
<fieldName>stackTracefieldName>

<throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
<maxDepthPerThrowable>200maxDepthPerThrowable>
<maxLength>14000maxLength>
<rootCauseFirst>truerootCauseFirst>
throwableConverter>
stackTrace>
<message />
<throwableClassName>
<fieldName>exceptionClassfieldName>
throwableClassName>
providers>
encoder>
appender>
<root level="info">
<appender-ref ref="stdout" />
<appender-ref ref="files" />
root>
configuration>

 

HelloController.java 代码

package com.example.hellospring;
import org.springframework.web.bind.annotation.RestController;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
@RestController
public class HelloController {
org.slf4j.Logger logger
= LoggerFactory.getLogger(getClass());
@RequestMapping(
"/")
public String index() {
logger.info(
"Loging into Storage Folder.... request from index page.... test by lb @09-02");
return "Greetings from Azure Spring Cloud!";
}
}

 

HellospringApplication.java 代码

package com.example.hellospring;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class HellospringApplication {
public static void main(String[] args) {
SpringApplication.run(HellospringApplication.
class, args);
}
}

 

 


参考资料

快速入门:在 Azure Spring Cloud 中部署你的第一个应用程序:https://docs.azure.cn/zh-cn/spring-cloud/quickstart?tabs=Azure-CLI#build-and-deploy-the-app

日志: https://docs.azure.cn/zh-cn/spring-cloud/quickstart-logs-metrics-tracing?tabs=Azure-CLI

 

当在复杂的环境中面临问题,格物之道需:浊而静之徐清,安以动之徐生。 云中,恰是如此!



推荐阅读
author-avatar
zbdxyyj
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有