📄 logger.java
字号:
/** * Returns the severity level threshold for this <code>Handler</code>. * All log records with a lower severity level will be discarded; * a log record of the same or a higher level will be published * unless an installed <code>Filter</code> decides to discard it. * * @return the severity level below which all log messages will be * discarded, or <code>null</code> if the logger inherits * the threshold from its parent. */ public synchronized Level getLevel() { return level; } /** * Returns whether or not a message of the specified level * would be logged by this logger. * * @throws NullPointerException if <code>level</code> * is <code>null</code>. */ public synchronized boolean isLoggable(Level level) { if (this.level != null) return this.level.intValue() <= level.intValue(); if (parent != null) return parent.isLoggable(level); else return false; } /** * Sets the severity level threshold for this <code>Handler</code>. * All log records with a lower severity level will be discarded * immediately. A log record of the same or a higher level will be * published unless an installed <code>Filter</code> decides to * discard it. * * @param level the severity level below which all log messages * will be discarded, or <code>null</code> to * indicate that the logger should inherit the * threshold from its parent. * * @throws SecurityException if this logger is not anonymous, a * security manager exists, and the caller is not granted * the permission to control the logging infrastructure by * having LoggingPermission("control"). Untrusted code can * obtain an anonymous logger through the static factory method * {@link #getAnonymousLogger(java.lang.String) getAnonymousLogger}. */ public synchronized void setLevel(Level level) { /* An application is allowed to control an anonymous logger * without having the permission to control the logging * infrastructure. */ if (!anonymous) LogManager.getLogManager().checkAccess(); this.level = level; } public synchronized Filter getFilter() { return filter; } /** * @throws SecurityException if this logger is not anonymous, a * security manager exists, and the caller is not granted * the permission to control the logging infrastructure by * having LoggingPermission("control"). Untrusted code can * obtain an anonymous logger through the static factory method * {@link #getAnonymousLogger(java.lang.String) getAnonymousLogger}. */ public synchronized void setFilter(Filter filter) throws SecurityException { /* An application is allowed to control an anonymous logger * without having the permission to control the logging * infrastructure. */ if (!anonymous) LogManager.getLogManager().checkAccess(); this.filter = filter; } /** * Returns the name of this logger. * * @return the name of this logger, or <code>null</code> if * the logger is anonymous. */ public String getName() { /* Note that the name of a logger cannot be changed during * its lifetime, so no synchronization is needed. */ return name; } /** * Passes a record to registered handlers, provided the record * is considered as loggable both by {@link #isLoggable(Level)} * and a possibly installed custom {@link #setFilter(Filter) filter}. * * <p>If the logger has been configured to use parent handlers, * the record will be forwarded to the parent of this logger * in addition to being processed by the handlers registered with * this logger. * * <p>The other logging methods in this class are convenience methods * that merely create a new LogRecord and pass it to this method. * Therefore, subclasses usually just need to override this single * method for customizing the logging behavior. * * @param record the log record to be inspected and possibly forwarded. */ public synchronized void log(LogRecord record) { if (!isLoggable(record.getLevel())) return; if ((filter != null) && !filter.isLoggable(record)) return; /* If no logger name has been set for the log record, * use the name of this logger. */ if (record.getLoggerName() == null) record.setLoggerName(name); /* Avoid that some other thread is changing the logger hierarchy * while we are traversing it. */ synchronized (LogManager.getLogManager()) { Logger curLogger = this; do { /* The Sun J2SE 1.4 reference implementation seems to call the * filter only for the logger whose log method is called, * never for any of its parents. Also, parent loggers publish * log record whatever their level might be. This is pretty * weird, but GNU Classpath tries to be as compatible as * possible to the reference implementation. */ for (int i = 0; i < curLogger.handlers.length; i++) curLogger.handlers[i].publish(record); if (curLogger.getUseParentHandlers() == false) break; curLogger = curLogger.getParent(); } while (parent != null); } } public void log(Level level, String message) { if (isLoggable(level)) log(level, message, (Object[]) null); } public synchronized void log(Level level, String message, Object param) { if (isLoggable(level)) { StackTraceElement caller = getCallerStackFrame(); logp(level, caller != null ? caller.getClassName() : "<unknown>", caller != null ? caller.getMethodName() : "<unknown>", message, param); } } public synchronized void log(Level level, String message, Object[] params) { if (isLoggable(level)) { StackTraceElement caller = getCallerStackFrame(); logp(level, caller != null ? caller.getClassName() : "<unknown>", caller != null ? caller.getMethodName() : "<unknown>", message, params); } } public synchronized void log(Level level, String message, Throwable thrown) { if (isLoggable(level)) { StackTraceElement caller = getCallerStackFrame(); logp(level, caller != null ? caller.getClassName() : "<unknown>", caller != null ? caller.getMethodName() : "<unknown>", message, thrown); } } public synchronized void logp(Level level, String sourceClass, String sourceMethod, String message) { logp(level, sourceClass, sourceMethod, message, (Object[]) null); } public synchronized void logp(Level level, String sourceClass, String sourceMethod, String message, Object param) { logp(level, sourceClass, sourceMethod, message, new Object[] { param }); } private synchronized ResourceBundle findResourceBundle() { if (resourceBundle != null) return resourceBundle; if (parent != null) return parent.findResourceBundle(); return null; } private synchronized void logImpl(Level level, String sourceClass, String sourceMethod, String message, Object[] params) { LogRecord rec = new LogRecord(level, message); rec.setResourceBundle(findResourceBundle()); rec.setSourceClassName(sourceClass); rec.setSourceMethodName(sourceMethod); rec.setParameters(params); log(rec); } public synchronized void logp(Level level, String sourceClass, String sourceMethod, String message, Object[] params) { logImpl(level, sourceClass, sourceMethod, message, params); } public synchronized void logp(Level level, String sourceClass, String sourceMethod, String message, Throwable thrown) { LogRecord rec = new LogRecord(level, message); rec.setResourceBundle(resourceBundle); rec.setSourceClassName(sourceClass); rec.setSourceMethodName(sourceMethod); rec.setThrown(thrown); log(rec); } public synchronized void logrb(Level level, String sourceClass, String sourceMethod, String bundleName, String message) { logrb(level, sourceClass, sourceMethod, bundleName, message, (Object[]) null); } public synchronized void logrb(Level level, String sourceClass, String sourceMethod, String bundleName, String message, Object param) { logrb(level, sourceClass, sourceMethod, bundleName, message, new Object[] { param }); } public synchronized void logrb(Level level, String sourceClass, String sourceMethod, String bundleName, String message, Object[] params) { LogRecord rec = new LogRecord(level, message); rec.setResourceBundleName(bundleName); rec.setSourceClassName(sourceClass); rec.setSourceMethodName(sourceMethod); rec.setParameters(params); log(rec); } public synchronized void logrb(Level level, String sourceClass, String sourceMethod, String bundleName, String message, Throwable thrown) { LogRecord rec = new LogRecord(level, message); rec.setResourceBundleName(bundleName); rec.setSourceClassName(sourceClass); rec.setSourceMethodName(sourceMethod); rec.setThrown(thrown); log(rec); } public synchronized void entering(String sourceClass, String sourceMethod) { if (isLoggable(Level.FINER)) logp(Level.FINER, sourceClass, sourceMethod, "ENTRY"); } public synchronized void entering(String sourceClass, String sourceMethod, Object param) { if (isLoggable(Level.FINER)) logp(Level.FINER, sourceClass, sourceMethod, "ENTRY {0}", param); } public synchronized void entering(String sourceClass, String sourceMethod, Object[] params) { if (isLoggable(Level.FINER)) { StringBuffer buf = new StringBuffer(80); buf.append("ENTRY"); for (int i = 0; i < params.length; i++) { buf.append(" {"); buf.append(i); buf.append('}'); } logp(Level.FINER, sourceClass, sourceMethod, buf.toString(), params); } } public synchronized void exiting(String sourceClass, String sourceMethod) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -