Logging Stackdriver日志、Logback和Logger名称
我正在登录到Logback,并已配置Stackdriver日志附加器,如下所示:Logging Stackdriver日志、Logback和Logger名称,logging,logback,stackdriver,Logging,Logback,Stackdriver,我正在登录到Logback,并已配置Stackdriver日志附加器,如下所示: application.log 通用节点 信息 日志条目显示在Stackdriver日志控制台中: { insertId: "[...]" labels: { levelName: "INFO" levelValue: "20000" } logName: "[...]" receiveTimestamp: "2019-01-03T13:42:10.888423743Z"
application.log
通用节点
信息
日志条目显示在Stackdriver日志控制台中:
{
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(“组件-a”)
日志警告(“地狱温度降到100°C以下”)
然后我希望看到日志消息来自名为“component-a”的记录器。我在Stackdriver日志文档中没有提到如何实现这一点。我想我可以配置一个LoggingEnhancer
,用记录器的名称增强每个日志条目,但是在增强日志条目时,我没有关于这个记录器的信息
有没有(希望是“规范的”)解决方案?您可以在logback.xml文件上实现LogginEnhancer和引用
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>
<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>
虽然已经晚了,但我还是遇到了同样的问题。我在检查了他们的appender源代码后找到了解决方案。实际上,您需要实现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">
<!-- 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>
<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>
或者为空(自动检测),而不是从0.77.0-alpha版本开始提供的Google日志条目,您可以设置标签;但是,在使用LoggerFactory时,我找不到任何设置标签的方法。我建议在以下github链接上创建一个功能请求,以添加一个功能,在使用LoggerFactory时可以在其中设置标签: