我正在登录Logback,并按如下所示配置了Stackdriver Logging附加程序:
<appender name="CLOUD" class="com.google.cloud.logging.logback.LoggingAppender">
<log>application.log</log>
<resourceType>generic_node</resourceType>
<flushLevel>INFO</flushLevel>
</appender>
日志条目显示在Stackdriver Logging控制台中
{
insertId: "[...]"
labels: {
levelName: "INFO"
levelValue: "20000"
}
logName: "[...]"
receiveTimestamp: "2019-01-03T13:42:10.888423743Z"
resource: {
labels: {
location: ""
namespace: ""
node_id: ""
project_id: "[...]"
}
type: "generic_node"
}
severity: "INFO"
textPayload: "client disconnected"
timestamp: "2019-01-03T13:42:10.841Z"
}
但是,我缺少有关记录器的信息,而该记录器是来自日志消息的。具体来说,假设我记录了这样的消息:
import org.slf4j.LoggerFactory
val log = LoggerFactory.getInstance("component-a")
log.warn("temperature in hell fell below 100°C")
然后,我希望看到日志消息来自记录器,名称为“ component-a”。我在Stackdriver Logging文档中没有提到如何实现此目的。我想我可以配置LoggingEnhancer
来用记录器的名称来增强每个日志条目,但是在增强日志条目时我没有关于该记录器的信息。
是否有(希望是“规范的”)解决方案?
答案 0 :(得分:0)
您可以只实现LogginEnhancer并在logback.xml文件上进行引用。
public class LogEnhancer implements LoggingEnhancer {
@Override
public void enhanceLogEntry(LogEntry.Builder logEntry) {
logEntry.addLabel("test-label-1", "test-value-1");
}
}
logback.xml
<configuration>
<appender name="CLOUD" class="com.google.cloud.logging.logback.LoggingAppender">
<!-- Optional : filter logs at or above a level -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<log>application.log</log> <!-- Optional : default java.log -->
<resourceType>gae_app</resourceType> <!-- Optional : default: auto-detected, fallback: global -->
<enhancer>com.gentera.conversationalservices.exception.LogEnhancer</enhancer> <!-- Optional -->
<flushLevel>WARN</flushLevel> <!-- Optional : default ERROR -->
</appender>
<root level="info">
<appender-ref ref="CLOUD" />
</root>
</configuration>
这是有关Github的完整示例:
答案 1 :(得分:0)
这很晚了,但我遇到了同样的问题。在检查了其附加程序源代码后,我找到了解决方案。您实际上需要工具LoggingEventEnhancer
public class StackDriverLoggingEnhancer implements LoggingEventEnhancer{
@Override
public void enhanceLogEntry(Builder builder, ILoggingEvent e) {
builder.addLabel("logger", e.getLoggerName());
builder.addLabel("thread", e.getThreadName());
}
}
并在logback.xml中
<configuration>
<appender name="CLOUD"
class="com.google.cloud.logging.logback.LoggingAppender">
<resourceType>k8s_pod</resourceType>
<loggingEventEnhancer>YOUR_PACKAGE.StackDriverLoggingEnhancer
</loggingEventEnhancer>
<log>application.log</log> <!-- Optional : default java.log -->
<flushLevel>INFO</flushLevel> <!-- Optional : default ERROR -->
</appender>
...
</configuration>
------更新---------- 资源类型应为以下其中一种
container
gae_app_flex
gae_app_standard
gce_instance
global
或为空(自动检测),而不是Google从0.77.0-alpha版本开始提供的document