![](/img/trans.png)
[英]Google Stackdriver Log Level not set in App Engine Flex (Node)
[英]How to log as jsonPayload to stackdriver from google app engine using logback?
我的 spring 启动应用程序使用 logback 以 json 格式记录消息。 该应用程序配置为使用 consolelogappender (stdout)。当日志出现在 stackdriver 中时,它们显示为 textPayload 而不是 jsonPayload。 是否可以使用 logback 将消息写入 stackdriver 中的 jsonPayload 字段? 如果不是,我有哪些选择以 json 格式登录?
基于此Github链接 ,似乎所有日志条目都被视为textpayload的问题。 它已被添加为功能请求,但尚无何时可用的ETA。
我不完全确定是否存在替代方法,因为Logback似乎可以提供大量的日志信息,但是如果您能够使用Stackdriver Logging Client ,则可以格式化该条目以便将对象作为JsonPayLoad来获取,尽管您可以您将自己指定大多数日志类别,这可能是一项额外的工作。
执行此操作的简单方法是在 LoggingEnhacer 上实现 TextPayload(JSON 格式)到JSONPayload的转换
可以通过 google-cloud-logging-logback 库。 但是,请注意以下内容(来自https://cloud.google.com/logging/docs/structured-logging ):
Note: message is saved as textPayload if it is the only field remaining
after the Logging agent moves the other special-purpose fields and
detect_json wasn't enabled; otherwise message remains in jsonPayload.
detect_json is not applicable to managed logging environments like
Google Kubernetes Engine.
要向 json 添加更多数据,请添加增强器。 例子:
import ch.qos.logback.classic.spi.ILoggingEvent;
import com.google.cloud.logging.LogEntry;
import com.google.cloud.logging.Payload;
import com.google.cloud.logging.logback.LoggingEventEnhancer;
import java.util.HashMap;
public class EventEnhancer implements LoggingEventEnhancer {
@Override
public void enhanceLogEntry(
LogEntry.Builder logEntry,
ILoggingEvent e
) {
HashMap<String, Object> map = new HashMap<>();
map.put("thread", e.getThreadName());
map.put("context", e.getLoggerContextVO().getName());
map.put("logger", e.getLoggerName());
Payload.JsonPayload payload = logEntry.build().getPayload();
map.putAll(payload.getDataAsMap());
logEntry.setPayload(
Payload.JsonPayload.of(map)
);
}
}
配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration scan="true">
<appender name="CLOUD" class="com.google.cloud.logging.logback.LoggingAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<log>application.log</log>
<redirectToStdout>true</redirectToStdout>
<resourceType>gae_app</resourceType>
<loggingEventEnhancer>EventEnhancer</loggingEventEnhancer>
<flushLevel>INFO</flushLevel>
</appender>
<root level="INFO">
<appender-ref ref="CLOUD"/>
</root>
</configuration>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.