日志服务

为什么本地日志会为空?

一般这种情况可能是Container迁移,导致本地文件全部丢失。本地日志的目的是为了临时调试,并不保证完全可靠。如果想长期保存日志,请使用分布式日志服务。

为什么看不到本地日志?

检查如下两方面:

  • 日志路径是否是/home/bae/log?

    使用任意后缀名将日志文件存入日志目录“/home/bae/log”后,即可使用特定编程语言提供的日志模块进行日志打印。例如,将用户日志:example.log.1和example.log.2存入/home/bae/log并先后进行了修改,则查询user.log,BAE按时间戳显示最后被修改的日志,即默认显示下述命令的输出:

    # 按时间戳显示最后被修改的日志
    $ tail /home/bae/log/example.log.2
    
  • 日志格式是否符合正则表达式"\^(.?).log.?[\^.](.*)\$"?

    必须符合正则表达式:"\^(.?).log.?[\^.](.*)\$",第2个分组为数字或空;例如access.log,error.log.2014112811, debug.log.modelA.20141128,符合开发者按时间或大小对日志进行切分的习惯,同时便于BAE将分组内容相同的日志文件归为一组展示给用户。例如,/home/bae/log目录下有access.log.1,access.log.2,页面上只显示access.log。

为什么看不到分布式日志?

  • user日志

    首先检查logLevel是否正确,等级小于level的默认不会被打印;其次,请检查AK,SK是否设置正确;

  • lighttpd日志

    说明执行单元有问题,请马上反馈给技术支持。有时可能是网络抖动,大部分时间都会重连。也可以尝试重新发布一版代码。

  • 最新日志

    有可能是时间戳选择错误,在Web页面上,时间戳并不是跟随系统实时更新的,日历控件下面有个“当前时间”的按钮,点一下,再重新查询。

还有一种情况,特定语言中的默认日志并非马上打印,而是有一个bufcount的参数(具体请参考各语言log服务SDK),要想马上看到,把bufcount改成1即可。但在上线前要去掉这个选项。

如何清空本地日志?

本地日志不需要自己清空,也不会占用太多空间,BAE会自动删除过大的文件。

为什么分布式日志打印不出来?

检查如下几点:

  • 查看本地日志中的标准输出文件,查看文件中的错误信息,一般Java常见的错误是没有添加BaeLog sdk的jar文件,或者没有添加SDK中的dependencies文件夹中所有的jar文件。python则需检查是否添加requirements.txt,并且添加了bae_log这行依赖。
  • 检查AK/SK有没有写反。
  • 检查日志等级是否设置太高,比如设置了INFO等级,打印了DEBUG日志。
  • 若是刚刚打印的日志没有马上刷出来,检查 bufcount配置,一般来说,每个语言设置的阈值为 50~200之间,是处于性能优化的考虑,将阈值调到1即可马上看到日志。

为什么我的中文日志显示的是乱码?

原则上不推荐使用中文日志,若必须打印中文日志,请务必使用UTF-8编码。

日志access.log中都有哪些参数?

以下面的access.log为例:

- status.api.duapp.com [14/Jul/2014:11:56:17 +0800] 200 175 460 0 "GET /status HTTP/1.1" "-" "python-requests/1.2.0 CPython/2.7.3 Linux/3.10.1-grsec" -
  • status.api.duapp.com:用于检查状态调用,用户可以忽略;
  • 200:页面的状态码;
  • 175:HTTP 请求的大小(单位是:字节);
  • 460:HTTP 响应的大小(单位是:字节);
  • 0:HTTP 响应的时间(单位是:毫秒)。