[英]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)
看起來您看到的日志是由不同的組件或進程生成的,並且相互交錯或“包裹”在一起。 當多個進程或線程正在寫入同一個日志文件或輸出流時,或者當中央日志管理系統正在收集和處理日志時,可能會發生這種情況。
為防止日志換行,您可能需要考慮以下選項:
默認情況下,Greengrass Nucleus 從它管理的進程中捕獲stdoud
和stderr
流,包括自定義組件。 然后它輸出日志的每一行,其中包含您以粗體突出顯示的前綴和后綴。 這是無法更改的。 您可以將格式從 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.