所以最近我將我的應用程式移到了 docker 容器中。
我注意到,日志組的日志流將其名稱更改為某個隨機散列。
在搬到碼頭之前:

搬到碼頭后:

每個檔案中的記錄器被初始化為
logger = logging.getLogger(__name__)
記錄器的配置設定在__main__with
def setup_logger(config_file):
with open(config_file) as log_config:
config_yml = log_config.read()
config_dict = yaml.safe_load(config_yml)
logging.config.dictConfig(config_dict)
使用從該檔案加載的配置
version: 1
disable_existing_loggers: False
formatters:
json:
format: "[%(asctime)s] %(process)d %(levelname)s %(name)s:%(funcName)s:%(lineno)s - %(message)s"
plaintext:
format: "%(asctime)s %(levelname)s %(name)s - %(message)s"
datefmt: "%Y-%m-%d %H:%M:%S"
handlers:
console:
class: logging.StreamHandler
formatter: plaintext
level: INFO
stream: ext://sys.stdout
root:
level: DEBUG
propagate: True
handlers: [console]
docker 映像使用標志運行
--log-driver=awslogs \
--log-opt awslogs-group=XXXXX \
--log-opt awslogs-create-group=true \
有沒有辦法保留原始日志流名稱?
uj5u.com熱心網友回復:
這就是 awslogs 驅動程式的作業方式。
根據檔案,您可以使用以下awslogs-stream-prefix選項稍微控制名稱:
awslogs-stream-prefix 選項允許您將日志流與指定的前綴、容器名稱和容器所屬的 Amazon ECS 任務的 ID 相關聯。如果您使用此選項指定前綴,則日志流采用以下格式:
前綴名稱/容器名稱/ecs-task-id
如果您沒有使用此選項指定前綴,則日志流將以容器實體上的 Docker 守護程式分配的容器 ID 命名。由于僅使用 Docker 容器 ID(僅在容器實體上可用)很難將日志追溯到發送它們的容器,因此我們建議您使用此選項指定前綴。
如果您使用 awslogs 驅動程式,則無法更改此行為。唯一的選擇是禁用日志驅動程式并使用 AWS 開發工具包手動將事件放入 CloudWatch,但我認為這不是一個好主意。
需要明確的是,使用 awslogs 時,您的容器設定/代碼根本不會影響流名稱 - 日志驅動程式只是將容器的所有 STDOUT 重定向到 CloudWatch。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/371469.html
