-------由于第一次写技术博客,描述的不清楚。如果真的有需要的朋友,可以直接评论问我。一定尽力回答--------
也许你们也会遇到跟我一样的问题,在bae下开发java的web应用,不能使用日志。因为部署在bae上的项目有很多限制,只有使用替代方案。
1.用数据库存日志信息。
2.使用 云环境(BAE) -> 应用调优 ->应用日志 ,这是bae自带的,使用挺方便的。
言归正传,直接来代码。
docs/cplat/rt/java/log百度官方文档
-
使用jdk自带的Log
开发bae下的java web项目需要在WEB-INF目录下添加
duapp-web.xml文件。
根据文档
JDK Log到BaeLog级别映射
日志平台上的展示的日志级别是基于BaeLog的日志级别展示的,因此需要了解java logging日志框架的日志级别与BaeLog级别的映射关系。具体如下:
-
- 若级别为SEVERE(1000)或以上,则对应到Baelog的FATAL
- 若级别为WARNING(900)或以上,则对应到Baelog的WARNING
- 若级别为INFO(800)或以上,则对应到Baelog的NOTICE
- 若级别高于CONFIG(700)或以上,则对应到Baelog的TRACE
- 否则,对应到Baelog的DEBUG
若需要定义JDK Log的日志输出级别,需要在duapp-web.xml中配置一行系统属性,设置方法如下所示,默认级别是INFO。
duapp-web.xml
<?xml version="1.0" encoding="utf-8"?>
<du-web-app xmlns="http://bae.baidu.com/java/1.0">
<!-- 注意级别顺序应该从高往低 -->
<system-properties>
<property name="java.util.logging.level" value="SEVERE"/>
<property name="java.util.logging.level" value="WARNING"/>
<property name="java.util.logging.level" value="INFO"/>
</system-properties>
</du-web-app>
注意:定义日志输出级别,务必从高往低依次定义。
写个servlet测试
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Logger log = Logger.getLogger("Test.class");
log.log(Level.INFO, "这是一条测试信息");
log.log(Level.SEVERE, "这是一条测试信息");
log.log(Level.SEVERE, "这是一条测试信息" + new Date().toLocaleString());
log.log(Level.WARNING,"这是一条测试信息");
}
观察
-
使用Log4j
log4j就没什么会弄错的了。但是还是把官方文档抄下来吧。
例子就不写了。
Log4J与BaeLog级别的映射关系。具体如下:
-
- 若级别为ERROR或以上,则对应到Baelog的FATAL
- 若级别为WARN或以上,则对应到Baelog的WARNING
- 若级别为INFO或以上,则对应到Baelog的NOTICE
- 若级别高于DEBUG或以上,则对应到Baelog的DEBUG
- 否则,对应到Baelog的TRACE
Log4J使用示例
首先,下载BaeLog的适配包立即下载,将其放到应用的lib目录下;另外,还需在Log4J的配置当中将Appender设为BAE的,以log4j.properties为例:
log4j.rootLogger=INFO, A2
log4j.appender.A2=com.baidu.bae.api.baelog.BaeAppender
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n