Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging Stackdriver日志、Logback和Logger名称_Logging_Logback_Stackdriver - Fatal编程技术网

Logging Stackdriver日志、Logback和Logger名称

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"

我正在登录到Logback,并已配置Stackdriver日志附加器,如下所示:


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时可以在其中设置标签: