如何从 Java Spring 应用程序获取日志到 Azure 门户

问题描述 投票:0回答:1

我有一个 Java Spring Boot 应用程序部署到 Azure 应用服务环境。我使用 log4J2 来处理应用程序的日志记录,并将日志写入与为应用程序服务创建的其他日志文件相同的位置。我能够在 KUDU 编辑器中找到我的 Spring Boot 应用程序正在创建并登录的日志文件 (spring.log),但我不知道从哪里开始。我的目标是使 java 应用程序写入日志文件的行可从 Azure 门户获取,这样我就可以在应用程序写入“某些特定异常”时设置警报。但是,我无法找到一种方法从天蓝色门户的应用程序服务的“日志”选项中查看此日志文件中的任何内容。我可以看到一些日志条目说该日志文件已创建/更新/删除,但日志文件的实际内容正是我所追求的。有谁知道如何做到这一点或者是否可能?对于其他上下文,我的应用程序作为 jsp 应用程序部署在 tomcat 服务器上,并作为 war 文件以及以下 web.config 文件部署到应用程序服务

<?xml version="1.0" encoding="UTF-8"?>      `
<configuration>
      <system.web>
          <customErrors mode="Off" />
      </system.web>
      <system.webServer>
         <httpErrors errorMode="Detailed"/>
         <handlers>
             <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified"/>
         </handlers>
         <httpPlatform processPath="%JAVA_HOME%\bin\java.exe" arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\my-application=name.war&quot;">
         </httpPlatform>
     </system.webServer>
 </configuration>

我什至还无法找到已部署版本的控制台输出,但是当我从本地 IDE 运行它时,我当然可以看到控制台输出。

我已打开应用程序的“诊断设置”,并将所有可用选项发送到日志分析工作区,但查询此工作区仍然没有给我提供与文件中包含的实际内容相关的任何结果。

java spring azure logging
1个回答
0
投票

我创建了一个示例 Spring Boot 应用程序来在本地生成日志

spring.log
。我成功在 Azure Web App KUDU 中的 File Manager > LogFiles > Application >
spring.xxxxx.log
下找到日志。

LoggingController.java:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class LoggingController {
    private static final Logger logger = LoggerFactory.getLogger(LoggingController.class);

    @GetMapping("/log")
    public String logSomething() {
        logger.info("Info log message");
        logger.warn("Warning log message");
        logger.error("Error log message");
        return "Logs have been generated!";
    }
}

应用程序属性:

logging.file.path=<folderpath>/LogFiles
logging.file.name=spring.log
logging.level.root=INFO

log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <File name="File" fileName="spring.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
        </Root>
    </Loggers>
</Configuration>

web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <handlers>
            <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" />
        </handlers>
        <httpPlatform processPath="%JAVA_HOME%\bin\java.exe"
                      arguments="-Djava.net.preferIPv4Stack=true -Dserver.port=%HTTP_PLATFORM_PORT% -jar &quot;%HOME%\site\wwwroot\my-spring-app.war&quot;">
        </httpPlatform>
    </system.webServer>
</configuration>

pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
    <version>3.4.1</version>
</dependency>

我在浏览器中得到以下输出。

enter image description here

我在

spring.log
文件中收到以下日志。

enter image description here

Azure Web 应用程序:

enter image description here

我们可以通过导航到

File Manager
> LogFiles > Application > spring.log,使用 KUDU 查看 Azure Web App 中的
spring.xxxxx.log
数据。

https://kamsbappxxxxxx.scm.canadacentral-01.azurewebsites.net/newui/fileManager

enter image description here

日志:

https://kamsbappxxxxxxx.scm.canadacentral-01.azurewebsites.net/api/vfs/LogFiles/Application/spring.ln0xxxxxx.log

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.