001    /*
002     * Copyright (c) 2009 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     */
016    package org.opengion.fukurou.util;
017    
018    import java.io.BufferedWriter;
019    import java.io.File;
020    import java.io.FileWriter;
021    import java.io.IOException;
022    import java.io.PrintWriter;
023    // import java.text.DateFormat;
024    // import java.text.SimpleDateFormat;
025    // import java.util.Date;
026    // import java.util.Locale;
027    
028    /**
029     * Logを書ãè¾¼ã‚?‚ºã® PrintWriter を管ç?™ã‚‹ã‚¯ãƒ©ã‚¹ã§ã™ã?
030     *
031     * 実際㮠Log ã®æ›¸ãè¾¼ã¿ã«ã¯??LogSender を利用ã—ã¦ä¸‹ã•ã??
032     *
033     * @og.group エラー処ç?
034     *
035     * @version  4.0
036     * @author   Kazuhiko Hasegawa
037     * @since    JDK5.0,
038     */
039    public final class LogWriter {
040            private static PrintWriter writer = null;
041    
042            private static String logFileUrl = null; // 4.1.0.1 (2008/01/23)
043    
044            /**
045             * ãƒ?ƒ•ォルトコンストラクター
046             * private ã«ã—ã¦?Œã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ãƒ¼ã®ä½œæ?ã‚’ã•ã›ãªã?§˜ã«ã—ã¦ã?¾ã™ã?
047             *
048             */
049            private LogWriter() {
050            }
051    
052            /**
053             * Logファイルã®å‡ºåŠ›å?を設定ã—ã¾ã™ã?
054             *
055             * @og.rev 4.1.0.1 (2008/01/23) æ–°è¦ä½œæ?
056             *
057             * @param   url 出力å?
058             */
059            public static synchronized void init( final String url ) {
060                    logFileUrl = url;
061            }
062    
063            /**
064             * Logを書ãå?ã—ã¾ã™ã?
065             *
066             * @og.rev 4.1.0.1 (2008/01/23) 出力時間を出力ã™ã‚‹ã?
067             * @og.rev 5.5.7.2 (2012/10/09) HybsDateUtil を利用ã™ã‚‹ã‚ˆã†ã«ä¿®æ­£ã—ã¾ã™ã?
068             *
069             * @param   message メãƒ?‚»ãƒ¼ã‚¸
070             */
071            public static synchronized void log( final String message ) {
072                    if( writer == null ) {
073                            writer = getPrintWriter();
074                    }
075    //              writer.println( message );
076    //              DateFormat formatter = new SimpleDateFormat( "yyyy/MM/dd HH:mm:ss.SSS",Locale.JAPAN );
077    //              writer.println( "[WriteTime= " + formatter.format( new Date() ) + "] " + message ); // 4.1.0.1 (2008/01/23)
078                    writer.println( "[WriteTime= " + HybsDateUtil.getDate( "yyyy/MM/dd HH:mm:ss.SSS" ) + "] " + message );  // 5.5.7.2 (2012/10/09) HybsDateUtil を利用
079                    writer.flush();
080            }
081    
082            /**
083             * 例外ã?スタãƒ?‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã‚’LogWriterã®PrintWriterã«æ›¸ãå?ã—ã¾ã™ã?
084             *
085             * @og.rev 4.1.0.1 (2008/01/23) æ–°è¦ä½œæ?
086             * @og.rev 4.3.4.5 (2009/01/08) nullãƒã‚§ãƒ?‚¯è¿½åŠ?
087             *
088             * @param   th スタãƒ?‚¯ãƒˆãƒ¬ãƒ¼ã‚¹ã®å–å¾—å?Throwableオブジェクãƒ?
089             */
090            public static synchronized void log( final Throwable th ) {
091                    if( writer == null ) {
092                            writer = getPrintWriter();
093                    }
094                    th.printStackTrace( writer );
095            }
096    
097            /**
098             * PrintWriter ã‚?close() ã—ã¾ã™ã?
099             *
100             */
101            public static synchronized void close() {
102                    if( writer != null ) { writer.close(); }
103                    writer = null;
104            }
105    
106            /**
107             * 追åŠ?ƒ¢ãƒ¼ãƒ‰ã§ä½œæ?ã—ãŸ?ŒPrintWriter ã‚’å–å¾—ã—ã¾ã™ã?
108             * PrintWriter ã¯?Œã‚·ãƒ³ã‚°ãƒ«ãƒˆã?ンã¨ã—ã¦?Œå”¯ä¸?­˜åœ¨ã•ã›ã¦ã?¾ã™ã?
109             *
110             * @og.rev 4.1.0.1 (2008/01/23) ログファイル出力å?を外部ã‹ã‚‰æŒ?®šã™ã‚‹ã?
111             *
112             * @return 追åŠ?ƒ¢ãƒ¼ãƒ‰ã§ä½œæ?ã—ãŸPrintWriter
113             */
114            private static synchronized PrintWriter getPrintWriter() {
115    //              String logFileName = HybsSystem.url2dir( HybsSystem.sys( "SYS_LOG_URL" ) );
116    
117                    if( logFileUrl == null || logFileUrl.length() == 0 ) {
118                            return new PrintWriter( System.err );
119                    }
120                    else {
121                            // 日付フォーãƒ??ファイルåを変æ›ã—ã¾ã™ã?
122                            DateSet dateSet = new DateSet();
123                            logFileUrl = dateSet.changeString(logFileUrl );
124    
125                            try {
126                                    File logFile = new File( logFileUrl );
127                                    return new PrintWriter( new BufferedWriter( new FileWriter( logFile, true ) ) );
128                            }
129                            catch( IOException ex ) {
130                                    String errMsg = "ログライターãŒä½œæ?ã§ãã¾ã›ã‚“ã€?" + logFileUrl + "]";
131    //                              throw new HybsSystemException( errMsg, e ); // 3.5.5.4 (2004/04/15) 引数ã®ä¸¦ã³é ?¤‰æ›´
132                                    throw new RuntimeException( errMsg, ex );
133                            }
134                    }
135            }
136    }