如何将 LMS 日志写入 Open edX devstack 中的文件?

How can I write LMS logs to file in Open edX devstack?

Open edX 用于在 /edx/var/log 上写入日志文件,但在 LMS docker 实例中,此路径中的所有文件夹都是空的,并且我找到的唯一文件('tracking.log `) 也是空的。

我可以在 devstack 上使用 make lms-logs 命令看到日志输出,但我希望将日志文件写入磁盘,就像在生产环境中一样。

我是 运行 hawthorn 版本,我还没有做任何更改。

我该如何启用它?

强烈不建议在生产环境中使用 Devstack。它不稳定,仅用于开发目的。所以你可以 setup a native openedx instance 然后你可以访问 /edx/var/logs/ 下的日志文件。但如果您确定要使用 Devstack,您可能会这样找到日志消息:

docker-compose logs --no-color --tail=1000 CONTAINER_NAME > logs.txt

如果我没记错的话,Open edX devstack 不记录日志文件 /edx/var/log 支持。 rsylog 也不在容器上 运行。

如果您真的想这样做,可以通过在几个地方进行自定义更改来启用它。在此之前,

如您所知,容器中的任何更改都不是持久的。重新启动容器后,您必须再次启动 rsylog

首先, 在 lms 容器

中启动 rsylog
make lms-shell
service rsyslog status
service rsyslog start

然后检查 LMS 容器内的 /dev 文件夹中是否启用了日志监听套接字。

ls /dev/log -l

如果您可以看到 /dev/log,则必须对 edx-platform/lms/envs/devstack_docker.py 文件添加一些更改以启用日志记录。

from openedx.core.lib.logsettings import get_logger_config



LOCAL_LOGLEVEL = "INFO"
SERVICE_VARIANT = os.environ.get('SERVICE_VARIANT', None)
LOGGING_ENV = 'sandbox'
LOG_DIR = "/edx/var/log/edx"

LOGGING = get_logger_config(LOG_DIR,
                            logging_env=LOGGING_ENV,
                            local_loglevel=LOCAL_LOGLEVEL,
                            service_variant=SERVICE_VARIANT)

然后在 LMS 容器中创建空日志文件

/edx/var/log/edx/lms/edx.org
/edx/var/log/edx/cms/edx.org
/edx/var/log/tracking/tracking.log

现在你可以查看日志,tail /edx/var/log/edx/lms/edx.org你会看到,

@Mahyar Damavand,有什么方法可以将该日志写入 Elasticsearch 吗?

将此添加到设置 (lms/envs/devstack_docker.py)

LOGGING['handlers']['tracking'] = {
    'level': 'DEBUG',
    'class': 'logging.FileHandler',
    'filename': '/edx/var/log/tracking/tracking.log',
    'formatter': 'raw',
}

LOGGING['loggers']['tracking']['handlers'] = ['tracking']