4 * License : The MIT License
5 * Copyright(c) 2011 olyutorskii
8 package jp.sfjp.jindolf.log;
10 import java.io.PrintStream;
11 import java.util.List;
12 import java.util.logging.ConsoleHandler;
13 import java.util.logging.Handler;
14 import java.util.logging.Logger;
15 import java.util.logging.LoggingPermission;
20 public final class LogUtils {
23 public static final LoggingPermission PERM_LOGCTL =
24 new LoggingPermission("control", null);
26 private static final PrintStream STDERR = System.err;
27 private static final String ERRMSG_LOGSECURITY =
28 "セキュリティ設定により、ログ設定を変更できませんでした";
40 * ログ操作のアクセス権があるか否か判定する。
41 * @return アクセス権があればtrue
43 public static boolean hasLoggingPermission(){
44 SecurityManager manager = System.getSecurityManager();
45 boolean result = hasLoggingPermission(manager);
50 * ログ操作のアクセス権があるか否か判定する。
51 * @param manager セキュリティマネージャ
52 * @return アクセス権があればtrue
54 public static boolean hasLoggingPermission(SecurityManager manager){
55 if(manager == null) return true;
58 manager.checkPermission(PERM_LOGCTL);
59 }catch(SecurityException e){
70 public static Logger getRootLogger(){
71 Logger rootLogger = Logger.getLogger("");
78 * {@link MomentaryHandler}ハンドラを登録する。
79 * @param useConsoleLog trueなら
80 * {@link java.util.logging.ConsoleHandler}も追加する。
82 public static void initRootLogger(boolean useConsoleLog){
83 if( ! hasLoggingPermission() ){
84 STDERR.println(ERRMSG_LOGSECURITY);
88 Logger rootLogger = getRootLogger();
90 Handler[] oldHandlers = rootLogger.getHandlers();
91 for(Handler handler : oldHandlers){
92 rootLogger.removeHandler(handler);
95 Handler momentaryHandler = new MomentaryHandler();
96 rootLogger.addHandler(momentaryHandler);
99 Handler consoleHandler = new ConsoleHandler();
100 rootLogger.addHandler(consoleHandler);
108 * ルートロガー中の全{@link MomentaryHandler}型ハンドラに
109 * 蓄積されていたログは、新ハンドラに一気に転送される。
110 * {@link MomentaryHandler}型ハンドラはルートロガーから削除される。
111 * ログ操作のパーミッションがない場合、何もしない。
112 * @param newHandler 新ハンドラ
114 public static void switchHandler(Handler newHandler){
115 if( ! hasLoggingPermission() ) return;
117 Logger logger = getRootLogger();
119 List<MomentaryHandler> momentaryHandlers =
120 MomentaryHandler.getMomentaryHandlers(logger);
121 MomentaryHandler.removeMomentaryHandlers(logger);
123 logger.addHandler(newHandler);
125 for(MomentaryHandler momentaryHandler : momentaryHandlers){
126 momentaryHandler.transfer(newHandler);
127 momentaryHandler.close();