如何将消息写入 AWS Glue 上的输出日志?
How do I write messages to the output log on AWS Glue?
AWS Glue 作业将输出和错误记录到两个不同的 CloudWatch 日志,默认为 /aws-glue/jobs/error
和 /aws-glue/jobs/output
。当我在脚本中包含 print()
语句进行调试时,它们会写入错误日志 (/aws-glue/jobs/error
)。
我试过使用:
log4jLogger = sparkContext._jvm.org.apache.log4j
log = log4jLogger.LogManager.getLogger(__name__)
log.warn("Hello World!")
但是 "Hello World!" 没有出现在测试作业 I 运行.
的任何一个日志中
有谁知道如何将调试日志语句写入输出日志 (/aws-glue/jobs/output
)?
TIA!
编辑:
事实证明,以上确实有效。发生的事情是我 运行 在 AWS Glue 脚本编辑器 window 中工作,它捕获 Command-F 组合键并且只在当前脚本中搜索。因此,当我尝试在页面内搜索日志输出时,它似乎没有被记录。
注意:通过测试第一响应者的建议,我确实发现 AWS Glue 脚本似乎不会输出任何级别低于 WARN 的日志消息!
尝试使用 logging
模块中的 built-in python 记录器,默认情况下它会将消息写入标准输出流。
import logging
MSG_FORMAT = '%(asctime)s %(levelname)s %(name)s: %(message)s'
DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
logging.basicConfig(format=MSG_FORMAT, datefmt=DATETIME_FORMAT)
logger = logging.getLogger(<logger-name-here>)
logger.setLevel(logging.INFO)
...
logger.info("Test log message")
我知道这篇文章并不新鲜,但也许对某些人有帮助:
对我来说,登录 glue 使用以下代码行:
# create glue context
glueContext = GlueContext(sc)
# set custom logging on
logger = glueContext.get_logger()
...
#write into the log file with:
logger.info("s3_key:" + your_value)
我遇到了同样的问题。我通过添加解决了它
logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
之前完全没有打印,连ERROR级别都没有
这个想法来自这里
https://medium.com/tieto-developers/how-to-do-application-logging-in-aws-745114ac6eb7
Another option would be to log to stdout and glue AWS logging to stdout (using stdout is actually one of the best practices in cloud logging).
更新:它仅适用于 setLevel("WARNING") 以及打印 ERROR 或 WARING 时。我没有找到如何在 INFO 级别管理它:(
我注意到上面的答案是写在python中的。对于 Scala,您可以执行以下操作
import com.amazonaws.services.glue.log.GlueLogger
object GlueApp {
def main(sysArgs: Array[String]) {
val logger = new GlueLogger
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
}
}
您可以从官方文档中找到 Python 和 Scala 解决方案 here
以防万一这有帮助。这适用于更改日志级别。
sc = SparkContext()
sc.setLogLevel('DEBUG')
glueContext = GlueContext(sc)
logger = glueContext.get_logger()
logger.info('Hello Glue')
这适用于 Glue Python 作业中的 INFO 级别:
import sys
root = logging.getLogger()
root.setLevel(logging.DEBUG)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)
root.info("check")
source
AWS Glue 作业将输出和错误记录到两个不同的 CloudWatch 日志,默认为 /aws-glue/jobs/error
和 /aws-glue/jobs/output
。当我在脚本中包含 print()
语句进行调试时,它们会写入错误日志 (/aws-glue/jobs/error
)。
我试过使用:
log4jLogger = sparkContext._jvm.org.apache.log4j
log = log4jLogger.LogManager.getLogger(__name__)
log.warn("Hello World!")
但是 "Hello World!" 没有出现在测试作业 I 运行.
的任何一个日志中有谁知道如何将调试日志语句写入输出日志 (/aws-glue/jobs/output
)?
TIA!
编辑:
事实证明,以上确实有效。发生的事情是我 运行 在 AWS Glue 脚本编辑器 window 中工作,它捕获 Command-F 组合键并且只在当前脚本中搜索。因此,当我尝试在页面内搜索日志输出时,它似乎没有被记录。
注意:通过测试第一响应者的建议,我确实发现 AWS Glue 脚本似乎不会输出任何级别低于 WARN 的日志消息!
尝试使用 logging
模块中的 built-in python 记录器,默认情况下它会将消息写入标准输出流。
import logging
MSG_FORMAT = '%(asctime)s %(levelname)s %(name)s: %(message)s'
DATETIME_FORMAT = '%Y-%m-%d %H:%M:%S'
logging.basicConfig(format=MSG_FORMAT, datefmt=DATETIME_FORMAT)
logger = logging.getLogger(<logger-name-here>)
logger.setLevel(logging.INFO)
...
logger.info("Test log message")
我知道这篇文章并不新鲜,但也许对某些人有帮助: 对我来说,登录 glue 使用以下代码行:
# create glue context
glueContext = GlueContext(sc)
# set custom logging on
logger = glueContext.get_logger()
...
#write into the log file with:
logger.info("s3_key:" + your_value)
我遇到了同样的问题。我通过添加解决了它
logging.getLogger().addHandler(logging.StreamHandler(sys.stdout))
之前完全没有打印,连ERROR级别都没有
这个想法来自这里 https://medium.com/tieto-developers/how-to-do-application-logging-in-aws-745114ac6eb7
Another option would be to log to stdout and glue AWS logging to stdout (using stdout is actually one of the best practices in cloud logging).
更新:它仅适用于 setLevel("WARNING") 以及打印 ERROR 或 WARING 时。我没有找到如何在 INFO 级别管理它:(
我注意到上面的答案是写在python中的。对于 Scala,您可以执行以下操作
import com.amazonaws.services.glue.log.GlueLogger
object GlueApp {
def main(sysArgs: Array[String]) {
val logger = new GlueLogger
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
}
}
您可以从官方文档中找到 Python 和 Scala 解决方案 here
以防万一这有帮助。这适用于更改日志级别。
sc = SparkContext()
sc.setLogLevel('DEBUG')
glueContext = GlueContext(sc)
logger = glueContext.get_logger()
logger.info('Hello Glue')
这适用于 Glue Python 作业中的 INFO 级别:
import sys
root = logging.getLogger()
root.setLevel(logging.DEBUG)
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
root.addHandler(handler)
root.info("check")
source