001/**
002 * Copyright (c) 2015-2022, Michael Yang 杨福海 (fuhai999@gmail.com).
003 * <p>
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 * <p>
008 * http://www.apache.org/licenses/LICENSE-2.0
009 * <p>
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, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package io.jboot.core.log;
017
018import com.jfinal.log.Log;
019import com.jfinal.log.LogInfo;
020import io.jboot.exception.JbootExceptionHolder;
021
022import java.util.logging.Level;
023
024/**
025 * JdkLogger from JdkLog.
026 */
027public class JdkLogger extends Log {
028
029        private java.util.logging.Logger log;
030        private String clazzName;
031
032        JdkLogger(Class<?> clazz) {
033                log = java.util.logging.Logger.getLogger(clazz.getName());
034                clazzName = clazz.getName();
035        }
036
037        JdkLogger(String name) {
038                log = java.util.logging.Logger.getLogger(name);
039                clazzName = name;
040        }
041
042        @Override
043        public void trace(String message) {
044                log.logp(Level.FINEST, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message);
045        }
046        
047        @Override
048        public void trace(String message, Throwable t) {
049                log.logp(Level.FINEST, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message, t);
050        }
051
052        @Override
053        public void debug(String message) {
054                log.logp(Level.FINE, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message);
055        }
056
057        @Override
058        public void debug(String message,  Throwable t) {
059                log.logp(Level.FINE, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message, t);
060        }
061
062        @Override
063        public void info(String message) {
064                log.logp(Level.INFO, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message);
065        }
066
067        @Override
068        public void info(String message, Throwable t) {
069                log.logp(Level.INFO, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message, t);
070        }
071
072        @Override
073        public void warn(String message) {
074                log.logp(Level.WARNING, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message);
075        }
076
077        @Override
078        public void warn(String message, Throwable t) {
079                log.logp(Level.WARNING, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message, t);
080        }
081
082        @Override
083        public void error(String message) {
084                JbootExceptionHolder.hold(message,null);
085                log.logp(Level.SEVERE, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message);
086        }
087
088        @Override
089        public void error(String message, Throwable t) {
090                JbootExceptionHolder.hold(message, t);
091                log.logp(Level.SEVERE, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message, t);
092        }
093        
094        /**
095         * JdkLog fatal is the same as the error.
096         */
097        @Override
098        public void fatal(String message) {
099                log.logp(Level.SEVERE, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message);
100        }
101        
102        /**
103         * JdkLog fatal is the same as the error.
104         */
105        @Override
106        public void fatal(String message, Throwable t) {
107                JbootExceptionHolder.hold(message, t);
108                log.logp(Level.SEVERE, clazzName, Thread.currentThread().getStackTrace()[1].getMethodName(), message, t);
109        }
110
111        @Override
112        public boolean isTraceEnabled() {
113                return log.isLoggable(Level.FINEST);
114        }
115
116        @Override
117        public boolean isDebugEnabled() {
118                return log.isLoggable(Level.FINE);
119        }
120
121        @Override
122        public boolean isInfoEnabled() {
123                return log.isLoggable(Level.INFO);
124        }
125
126        @Override
127        public boolean isWarnEnabled() {
128                return log.isLoggable(Level.WARNING);
129        }
130
131        @Override
132        public boolean isErrorEnabled() {
133                return log.isLoggable(Level.SEVERE);
134        }
135
136        @Override
137        public boolean isFatalEnabled() {
138                return log.isLoggable(Level.SEVERE);
139        }
140        
141        // -------------------------------------------------------
142        
143        /*
144         * 以下方法与前面的两个 trace 方法必须覆盖父类中的实现,否则日志中的类名为
145         * com.jfinal.log.Log 而非所需要的日志发生地点的类名
146         */
147
148        @Override
149        public void trace(String format, Object... args) {
150                if (isTraceEnabled()) {
151                        if (endsWithThrowable(args)) {
152                                LogInfo li = parse(format, args);
153                                trace(li.message, li.throwable);
154                        } else {
155                                trace(String.format(format, args));
156                        }
157                }
158        }
159
160        @Override
161        public void debug(String format, Object... args) {
162                if (isDebugEnabled()) {
163                        if (endsWithThrowable(args)) {
164                                LogInfo li = parse(format, args);
165                                debug(li.message, li.throwable);
166                        } else {
167                                debug(String.format(format, args));
168                        }
169                }
170        }
171
172        @Override
173        public void info(String format, Object... args) {
174                if (isInfoEnabled()) {
175                        if (endsWithThrowable(args)) {
176                                LogInfo li = parse(format, args);
177                                info(li.message, li.throwable);
178                        } else {
179                                info(String.format(format, args));
180                        }
181                }
182        }
183
184        @Override
185        public void warn(String format, Object... args) {
186                if (isWarnEnabled()) {
187                        if (endsWithThrowable(args)) {
188                                LogInfo li = parse(format, args);
189                                warn(li.message, li.throwable);
190                        } else {
191                                warn(String.format(format, args));
192                        }
193                }
194        }
195
196        @Override
197        public void error(String format, Object... args) {
198                if (isErrorEnabled()) {
199                        if (endsWithThrowable(args)) {
200                                LogInfo li = parse(format, args);
201                                error(li.message, li.throwable);
202                        } else {
203                                error(String.format(format, args));
204                        }
205                }
206        }
207
208        @Override
209        public void fatal(String format, Object... args) {
210                if (isFatalEnabled()) {
211                        if (endsWithThrowable(args)) {
212                                LogInfo li = parse(format, args);
213                                fatal(li.message, li.throwable);
214                        } else {
215                                fatal(String.format(format, args));
216                        }
217                }
218        }
219}
220
221
222