Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Not
Temel, Standart ve Kurumsal planları 17 Mart 2025'te kullanımdan kaldırılma dönemine girdi. Daha fazla bilgi için bkz . Azure Spring Apps kullanımdan kaldırma duyurusu.
Bu makale şunlar için geçerlidir:✅ Temel/Standart ✅ Kurumsal
Bu makalede, Azure Spring Apps'te yapılandırılmış uygulama günlüğü verilerinin nasıl oluşturulacağı ve topladığı açıklanır. Uygun yapılandırma ile Azure Spring Apps, Log Analytics aracılığıyla kullanışlı uygulama günlüğü sorgusu ve analizi sağlar.
Günlük şeması gereksinimleri
Günlük sorgusu deneyimini geliştirmek için bir uygulama günlüğünün JSON biçiminde olması ve şemaya uyması gerekir. Azure Spring Apps, uygulamanızı ayrıştırmak ve Log Analytics'e akış yapmak için bu şemayı kullanır.
Not
JSON günlük biçiminin etkinleştirilmesi, konsoldan günlük akışı çıktısının okunmasını zorlaştırır. İnsan tarafından okunabilir bir çıkış elde etmek için --format-json argümanını CLI komutuna ekleyinaz spring app logs. Bkz JSON yapılandırılmış günlükleri biçimlendirme.
JSON şema gereksinimleri:
| JSON Anahtarı | JSON değer Türü | Zorunlu | Log Analytics'teki sütun | Açıklama |
|---|---|---|---|---|
| timestamp | string | Yes | AppTimestamp | UTC biçiminde zaman damgası |
| Kayıt cihazı | string | Hayır | Günlükçü | Günlükçü |
| düzey | string | Hayır | ÖzelleştirilmişSeviye | günlük seviyesi |
| thread | string | Hayır | İleti Dizisi | thread |
| mesaj | string | Hayır | İleti | log mesajı |
| stackTrace | string | Hayır | StackTrace | hata yığını izi |
| exceptionClass | string | Hayır | ExceptionClass | özel durum sınıfı adı |
| mdc | iç içe JSON | Hayır | eşlenmiş tanılama bağlamı | |
| mdc.traceId | string | Hayır | TraceId | dağıtılmış izleme için izleme kimliği |
| mdc.spanId | string | Hayır | SpanId | Dağıtılmış izleme için span kimliği |
- "Zaman damgası" alanı gereklidir ve UTC biçiminde olmalıdır, diğer tüm alanlar isteğe bağlıdır.
- İzleme amacıyla "mdc" alanındaki "traceId" ve "spanId" kullanılır.
- Her JSON kaydını tek satırda günlüğe kaydedin.
Günlük kaydı örneği
{"timestamp":"2021-01-08T09:23:51.280Z","logger":"com.example.demo.HelloController","level":"ERROR","thread":"http-nio-1456-exec-4","mdc":{"traceId":"c84f8a897041f634","spanId":"c84f8a897041f634"},"stackTrace":"java.lang.RuntimeException: get an exception\r\n\tat com.example.demo.HelloController.throwEx(HelloController.java:54)\r\n\","message":"Got an exception","exceptionClass":"RuntimeException"}
Sınırlamalar
JSON günlüklerinin her satırında en fazla 16 K bayt vardır. Tek bir günlük kaydının JSON çıkışı bu sınırı aşarsa, birden çok satıra ayrılır ve her ham satır yapısal olarak ayrıştırılmadan sütuna Log toplanır.
Genellikle, bu durum derin yığın izleme durumu ile istisna kaydında, özellikle AppInsights İşlem İçi Aracısı etkinleştirildiğinde gerçekleşir. Son çıkışın düzgün ayrıştırıldığından emin olmak için stacktrace çıkışına sınır ayarları uygulayın (aşağıdaki yapılandırma örneklerine bakın).
Şema uyumlu JSON günlüğü oluşturma
Spring uygulamaları için Logback ve Log4j2 gibi ortak günlük çerçevelerini kullanarak beklenen JSON günlük biçimini oluşturabilirsiniz.
Logback ile loglama
Spring Boot başlatıcıları kullanılırken varsayılan olarak Logback kullanılır. Logback uygulamaları için logstash-encoder kullanarak JSON biçimli günlük oluşturun. Bu yöntem Spring Boot sürüm 2.1 veya sonraki sürümlerde desteklenir.
Prosedür:
pom.xml dosyanıza logstash bağımlılığı ekleyin.
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>6.5</version> </dependency>JSON biçimini ayarlamak için yapılandırma dosyanızı
logback-spring.xmlgüncelleştirin.<configuration> <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"> <providers> <timestamp> <fieldName>timestamp</fieldName> <timeZone>UTC</timeZone> </timestamp> <loggerName> <fieldName>logger</fieldName> </loggerName> <logLevel> <fieldName>level</fieldName> </logLevel> <threadName> <fieldName>thread</fieldName> </threadName> <nestedField> <fieldName>mdc</fieldName> <providers> <mdc /> </providers> </nestedField> <stackTrace> <fieldName>stackTrace</fieldName> <!-- maxLength - limit the length of the stack trace --> <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter"> <maxDepthPerThrowable>200</maxDepthPerThrowable> <maxLength>14000</maxLength> <rootCauseFirst>true</rootCauseFirst> </throwableConverter> </stackTrace> <message /> <throwableClassName> <fieldName>exceptionClass</fieldName> </throwableClassName> </providers> </encoder> </appender> <root level="info"> <appender-ref ref="stdout" /> </root> </configuration>Son eki
-springiçerenlogback-spring.xmlgünlük yapılandırma dosyası kullanıldığında, günlük yapılandırması Spring aktif profiline göre ayarlanabilir.<configuration> <springProfile name="dev"> <!-- JSON appender definitions for local development, in human readable format --> <include resource="org/springframework/boot/logging/logback/defaults.xml" /> <include resource="org/springframework/boot/logging/logback/console-appender.xml" /> <root level="info"> <appender-ref ref="CONSOLE" /> </root> </springProfile> <springProfile name="!dev"> <!-- JSON appender configuration from previous step, used for staging / production --> ... </springProfile> </configuration>Yerel geliştirme için Spring uygulamasını JVM bağımsız değişkeniyle
-Dspring.profiles.active=devçalıştırın, ardından JSON biçimli çizgiler yerine insan tarafından okunabilir günlükleri görebilirsiniz.
log4j2 ile kayıt
log4j2 uygulamaları için json-template-layout kullanarak JSON biçimli günlük oluşturun. Bu yöntem Spring Boot sürüm 2.1+'da desteklenir.
Prosedür:
spring-boot-starteröğesindenspring-boot-starter-logging'yi hariç tutun, pom.xml dosyanızaspring-boot-starter-log4j2,log4j-layout-template-jsonbağımlılıklarını ekleyin.<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-layout-template-json</artifactId> <version>2.14.0</version> </dependency>Sınıf yolunuzda bir JSON düzen şablonu dosyası
jsonTemplate.jsonhazırlayın.{ "mdc": { "$resolver": "mdc" }, "exceptionClass": { "$resolver": "exception", "field": "className" }, "stackTrace": { "$resolver": "exception", "field": "stackTrace", "stringified": true }, "message": { "$resolver": "message", "stringified": true }, "thread": { "$resolver": "thread", "field": "name" }, "timestamp": { "$resolver": "timestamp", "pattern": { "format": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", "timeZone": "UTC" } }, "level": { "$resolver": "level", "field": "name" }, "logger": { "$resolver": "logger", "field": "name" } }Bu JSON düzen şablonunu
log4j2-spring.xmlyapılandırma dosyanıza ekleyin.<configuration> <appenders> <console name="Console" target="SYSTEM_OUT"> <!-- maxStringLength - limit the length of the stack trace --> <JsonTemplateLayout eventTemplateUri="classpath:jsonTemplate.json" maxStringLength="14000" /> </console> </appenders> <loggers> <root level="info"> <appender-ref ref="Console" /> </root> </loggers> </configuration>
Log Analytics'te günlükleri analiz etme
Uygulamanız düzgün bir şekilde ayarlandıktan sonra, uygulama konsol günlüğünüz Log Analytics'e akışla gönderilir. Yapısı Log Analytics'te verimli sorgu sağlar.
Log Analytics aracında günlük yapısını denetleyin
Aşağıdaki yordamı kullanın:
Hizmet örneğinizin hizmete genel bakış sayfasına gidin.
İzleme bölümünde Günlükler girdisini seçin.
Bu sorguyu çalıştırın.
AppPlatformLogsforSpring | where TimeGenerated > ago(1h) | project AppTimestamp, Logger, CustomLevel, Thread, Message, ExceptionClass, StackTrace, TraceId, SpanIdUygulama günlükleri aşağıdaki görüntüde gösterildiği gibi döner:
Hata içeren günlük girdilerini göster
Hata içeren günlük girdilerini gözden geçirmek için aşağıdaki sorguyu çalıştırın:
AppPlatformLogsforSpring
| where TimeGenerated > ago(1h) and CustomLevel == "ERROR"
| project AppTimestamp, Logger, ExceptionClass, StackTrace, Message, AppName
| sort by AppTimestamp
Hataları bulmak için bu sorguyu kullanın veya belirli özel durum sınıfını veya hata kodunu bulmak için sorgu terimlerini değiştirin.
Belirli bir traceId için günlük girdilerini gösterme
Belirli bir izleme kimliği "trace_id" için günlük girdilerini gözden geçirmek için aşağıdaki sorguyu çalıştırın:
AppPlatformLogsforSpring
| where TimeGenerated > ago(1h)
| where TraceId == "trace_id"
| project AppTimestamp, Logger, TraceId, SpanId, StackTrace, Message, AppName
| sort by AppTimestamp
Sonraki adımlar
- Günlük Sorgusu hakkında daha fazla bilgi edinmek için bkz . Azure İzleyici'de günlük sorgularını kullanmaya başlama