*.bin
*.tgz
*.swp
+log.xml
datastore-indexes-auto.xml
<!-- vim:set et sw=2 sts=2 ts=2 fenc=utf-8: -->
-<project>
+<project default="compile">
<property name="sdk.dir" location="../appengine-java-sdk-1.2.2" />
<import file="${sdk.dir}/config/user/ant-macros.xml" />
</fileset>
</path>
+ <target name="init">
+ <delete>
+ <fileset dir=".">
+ <include name="**/*.swp" />
+ </fileset>
+ </delete>
+ </target>
+
<target name="copyjars"
+ depends="init"
description="Copies the App Engine JARs to the WAR.">
<copy
todir="war/WEB-INF/lib"
<appcfg action="request_logs" war="war">
<options>
<arg value="--num_days=5"/>
+ <arg value="--severity=0"/>
</options>
<args>
<arg value="logs.txt"/>
</appcfg>
</target>
+ <target name="clean">
+ <delete>
+ <fileset dir="war/WEB-INF/classes">
+ <include name="**/*.class" />
+ </fileset>
+ </delete>
+ </target>
+
</project>
--- /dev/null
+logback/jul切り替え(ログレベル含む)
+freemarkerのキャッシュを切る
+トレースインターセプターを切る
+メッセージソースのリロード時間を切る
cglib-nodep-2.1_3.jar
commons-collections-3.2.1.jar
commons-lang-2.4.jar
-commons-logging.jar
freemarker.jar
jdo2-api-2.3-SNAPSHOT.jar
jstl.jar
spring-web.jar
spring-webmvc.jar
standard.jar
+logback-classic-0.9.17.jar
+logback-core-0.9.17.jar
+slf4j-api-1.5.8.jar
+jcl-over-slf4j-1.5.8.jar
package jp.sourceforge.rabbitBTS;
-import java.util.logging.Logger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
@SuppressWarnings("unchecked")
public static final Logger log(Class c){
- return Logger.getLogger(c.getName());
+ return LoggerFactory.getLogger(c.getName());
}
public static final Logger log(Object o){
- return Logger.getLogger(o.getClass().getName());
+ return LoggerFactory.getLogger(o.getClass().getName());
}
}
this.validator.validate(post, result);
if (result.hasErrors()) {
- Sht.log(this).finest("BBS Post Validate fail.");
+ Sht.log(this).trace("BBS Post Validate fail.");
return null;
}
}
if (account == null) {
- Sht.log(this).warning("存在しないアカウントの削除が試行されました。");
+ Sht.log(this).warn("存在しないアカウントの削除が試行されました。");
}
map.addAttribute("accForDel", account);
ret = null;
} else {
// すでに登録済みの場合ホームへリダイレクト
- Sht.log(this).finer("既に登録済み");
+ Sht.log(this).trace("既に登録済み");
ret = REDIRECT_HOME_HTML;
}
} catch (final HasNotValidIdException e) {
// googleにログインしてない場合
- Sht.log(this).finer("ログインが必要");
+ Sht.log(this).trace("ログインが必要");
ret = "redirect:" + Sht.loginUrl(req);
}
return ret;
account.setEmail(Sht.user().getEmail());
this.validator.validate(account, result);
if (result.hasErrors()) {
- Sht.log(this).finer("ユーザ登録画面にてバリデートに失敗");
+ Sht.log(this).trace("ユーザ登録画面にてバリデートに失敗");
return null;
}
if (this.accountService.getAccountByNickName(account
.getNickName()) != null) {
result.rejectValue("nickName", "Account.nickName[duplicate]");
- Sht.log(this).finer("nickName重複チェックエラー");
+ Sht.log(this).trace("nickName重複チェックエラー");
return null;
}
this.accountService.registAccount(account);
} catch (final RabbitBTSException e) {
- Sht.log(this).log(Level.WARNING, "ユーザー登録で例外発生", e);
+ Sht.log(this).warn("ユーザー登録で例外発生", e);
// TODO:resultにセット
map.addAttribute("errorMessage", "登録に失敗しました。再度やりなおしてください。");
return null;
}
// アカウント未登録の場合、登録ページにリダイレクトする。
response.sendRedirect("/register/");
- Sht.log(this).warning(
- "403(not registerd.) " + request.getRequestURL());
+ Sht.log(this).warn(
+ "403(not registerd.) {}", request.getRequestURL());
return false;
} catch (final HasNotValidIdException e) {
if (handler instanceof IPublicController) {
// ログインしていない場合、ログインページにリダイレクトする。
response.sendRedirect(Sht.loginUrl(request));
- Sht.log(this).warning("403 " + request.getRequestURL());
+ Sht.log(this).warn("403 {}", request.getRequestURL());
return false;
}
}
c.setCsrfSafe(true);
} else {
c.setCsrfSafe(false);
- Sht.log(this).warning("CSRF detected.");
+ Sht.log(this).warn("CSRF detected.");
}
}
return true;
// きちんとCSRFチェックが行われているかチェックする
final IController c = (IController) handler;
if (!c.isCsrfChecked()) {
- Sht.log(this).severe("CSRFチェックを行っていないPOST");
+ Sht.log(this).error("CSRFチェックを行っていないPOST");
}
assert c.isCsrfChecked() : "CSRFチェックを行っていないPOST";
}
public void postHandle(HttpServletRequest request,
HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
- Sht.log(this).finest("postHandle " + makeURL(request));
+ Sht.log(this).trace("postHandle {}", makeURL(request));
}
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
- Sht.log(this).finest("preHandle " + makeURL(request));
+ Sht.log(this).trace("preHandle {}", makeURL(request));
return true;
}
// 最初のスーパーユーザーかチェック
if (account.getEmail().equals(this.firstSuperUser)) {
account.setAdmin(true);
- Sht.log(this).warning(
- "Admin Account Created. " + this.firstSuperUser);
+ Sht.log(this).warn(
+ "Admin Account Created. {}", this.firstSuperUser);
}
// nickName重複チェック
if (this.accountDao.findAccountByNickName(account.getNickName()) != null) {
Sht.log(this).info(
- "nickName " + account.getNickName() + " is already used.");
+ "nickName {} is already used.", account.getNickName());
throw new RabbitBTSException("nickNameが重複しています。");
}
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<!-- vim:set ts=2 sts=2 sw=2 et fenc=utf-8 -->
+<configuration scan="true" scanPeriod="3 seconds">
+ <appender name="STDOUT"
+ class="ch.qos.logback.core.ConsoleAppender">
+ <layout class="ch.qos.logback.classic.PatternLayout">
+ <Pattern>
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %ex %n
+ </Pattern>
+ </layout>
+ </appender>
+<appender name="FILE" class="ch.qos.logback.core.FileAppender">
+ <File>log.xml</File>
+ <layout class="ch.qos.logback.classic.log4j.XMLLayout">
+ <LocationInfo>true</LocationInfo>
+ </layout>
+ </appender>
+
+ <logger name="jp.sourceforge.rabbitBTS" level="TRACE" />
+ <logger name="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver" level="OFF" />
+ <root level="INFO">
+ <appender-ref ref="STDOUT" />
+ <appender-ref ref="FILE" />
+ </root>
+
+</configuration>