001/* 002 * Copyright (c) 2017 The openGion Project. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, 013 * either express or implied. See the License for the specific language 014 * governing permissions and limitations under the License. 015 */ 016package org.opengion.fukurou.fileexec; 017 018import java.nio.file.Paths; // 6.8.1.5 (2017/09/08) 019 020import java.util.logging.Logger; 021import java.util.logging.Level; 022import java.util.function.Supplier; // 6.8.1.0 (2017/07/14) 023 024/** 025 * XLoggerは、Throwable を引数に取るwarningと、Level 600 の debug メソッドを 026 * 持つ、Logger の拡張クラスです。 027 * ここでは、継承するのではなく、委譲で、最低限のメソッドだけに対応しています。 028 * (LogManager とか、色々とややこしそうなので、調査する暇が無い) 029 * 030 * WARNING(900) → INFO(800) → CONFIG(700) → XXXX(600) → FINE(500) → ALL(Integer.MIN_VALUE) 031 * となっていますが、FINE では、多すぎ、INFO は、通常使用、間に、DEBUG的な、 032 * ロギングが欲しい場合に使用します。 033 * CONFIG を使いたいところですが、「CONFIGは静的な構成メッセージのメッセージ・レベルです。」と 034 * JavaDocにわざわざ、書かれていることから、使用を避けます。 035 * 036 * @og.rev 7.0.0.0 (2017/07/07) 新規作成 037 * 038 * @version 7.0 039 * @author Kazuhiko Hasegawa 040 * @since JDK1.8, 041 */ 042public class XLogger { 043 /** 044 * デバッグレベルを新規に定義します。 045 */ 046 private static final class LEVEL_DEBUG extends Level { 047 private static final long serialVersionUID = 681020170714L ; // 6.8.1.0 (2017/07/14) 048 /** 049 * デバッグレベルのコンストラクター 050 */ 051 public LEVEL_DEBUG() { super( "600",600 ); } 052 }; 053 054 private static final Level DEBUG = new LEVEL_DEBUG(); 055 056 private final Logger LOGGER; 057 058 /** 059 * 名前を指定して、XLoggerオブジェクトを作成します。 060 * 061 * @og.rev 6.8.1.5 (2017/09/08) logフォルダの存在チェックと作成 062 * 063 * @param name ロガーの名前。通常は、クラス.class.getName() を渡せばよいです。 064 */ 065 private XLogger( final String name ) { 066 FileUtil.mkdirs( Paths.get( "log" ) ); // Logger の log フォルダが無ければ作成します。 067 068 LOGGER = Logger.getLogger( name ); 069 } 070 071 /** 072 * 名前を指定して、XLoggerオブジェクトを作成します。 073 * 074 * @param name ロガーの名前。通常は、クラス.class.getName() を渡せばよいです。 075 * @return XLoggerオブジェクト 076 */ 077 public static XLogger getLogger( final String name ) { 078 return new XLogger( name ); // 今は、個別に作成していますが、本来は、同じオブジェクトを返すようにすべき。 079 } 080 081 /** 082 * INFO レベルのログをとります。 083 * 084 * @param msgSupplier 呼び出されると、目的のログ・メッセージを生成する関数 085 * @see Logger#info( Supplier ) 086 */ 087 public void info( final Supplier<String> msgSupplier ) { 088 LOGGER.info( msgSupplier ); 089 } 090 091 /** 092 * WARNING レベルのログをとります。 093 * 094 * @param msgSupplier 呼び出されると、目的のログ・メッセージを生成する関数 095 * @see Logger#warning( Supplier ) 096 */ 097 public void warning( final Supplier<String> msgSupplier ) { 098 LOGGER.warning( msgSupplier ); 099 } 100 101 /** 102 * WARNING レベルのログをとります。 103 * 104 * これは、Throwable を引数に取る拡張されたメソッドです。 105 * 106 * @param thrown ログ・メッセージに関連したThrowable。 107 * @param msgSupplier 呼び出されると、目的のログ・メッセージを生成する関数 108 * @see Logger#log( Level,Throwable,Supplier ) 109 */ 110 public void warning( final Throwable thrown , final Supplier<String> msgSupplier ) { 111 LOGGER.log( Level.WARNING , thrown , msgSupplier ); 112 } 113 114 /** 115 * 600 レベルのログをとります。 116 * 117 * Supplierを引数に、Level = 600 のログをとります。 118 * 119 * @param msgSupplier 呼び出されると、目的のログ・メッセージを生成する関数 120 * @see Logger#log( Level,Supplier ) 121 */ 122 public void debug( final Supplier<String> msgSupplier ) { 123 LOGGER.log( DEBUG , msgSupplier ); 124 } 125}