簡體   English   中英

Greengrass V2 生成額外的“stdout”日志

[英]Greengrass V2 generates extra `stdout` logs

我將 greengrass 組件部署到我的 EC2 實例中。 部署 greengrass 組件一直在生成環繞我的 python 日志的日志。

是什么導致了它的“環繞”? 我怎樣才能去掉這些包裹。

例如,粗體日志是對原始 python 日志的包裝。 強調的日志是由我的 python 日志格式化程序生成的。

2022-12-13T23:59:56.926Z [信息](復印機)com.bolt-data.iot.RulesEngineCore:標准輸出。 [2022-12-13 23:59:56,925][DEBUG][iot-ipc] 檢查 redis pub-sub 健康狀況 (io_thread[140047617824320]:pub_sub_redis:_connection_health_nanny_task:61)。 {scriptName=services.com.bolt-data.iot.RulesEngineCore.lifecycle.Run, serviceName=com.bolt-data.iot.RulesEngineCore, currentState=RUNNING}

以下是我的 python 日志格式化程序。

    formatter = logging.Formatter(
        fmt="[%(asctime)s][%(levelname)-7s][%(name)s] %(message)s (%(threadName)s[%(thread)d]:%(module)s:%(funcName)s:%(lineno)d)"
    )

    # TODO: when we're running in the lambda function, don't stream to stdout
    _handler = logging.StreamHandler(stream=stdout)
    _handler.setLevel(get_level_from_environment())
    _handler.setFormatter(formatter)

看起來您看到的日志是由不同的組件或進程生成的,並且相互交錯或“包裹”在一起。 當多個進程或線程正在寫入同一個日志文件或輸出流時,或者當中央日志管理系統正在收集和處理日志時,可能會發生這種情況。

為防止日志換行,您可能需要考慮以下選項:

  1. 配置每個組件或進程以寫入單獨的日志文件或輸出流。 這將允許您分離日志並避免交錯。
  2. 使用日志消息時間戳對日志進行排序。 如果日志包含時間戳,您可以使用它們對日志進行排序並確定首先生成哪些日志消息。 這可以幫助您了解事件發生的順序。
  3. 使用可以解析和排序日志的日志管理系統。 有許多可用的日志管理工具可以從多個來源(包括 EC2 實例)收集和解析日志。 這些工具通常可以根據時間戳和其他元數據自動對日志進行排序,這樣可以更輕松地理解和分析日志。

默認情況下,Greengrass Nucleus 從它管理的進程中捕獲stdoudstderr流,包括自定義組件。 然后它輸出日志的每一行,其中包含您以粗體突出顯示的前綴和后綴。 這是無法更改的。 您可以將格式從 TEXT 切換為 JSON,這可以使機器更容易解析日志(檢查greengrass-nucleus-component-configuration - logging.format

import logging
from logging.handlers import RotatingFileHandler

logger = logging.Logger(__name__)
_handler = RotatingFileHandler("mylog.log")

# additional _handler configuration

logger.addHandler(_handler)

如果您想要 output 日志僅包含您的應用程序生成的內容,請將記錄器配置 output 更改為文件。 您可以將文件寫入組件的工作文件夾或其他位置,例如/var/log

干杯,馬西米利亞諾

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM