elformatter.java
来自「RESIN 3.2 最新源码」· Java 代码 · 共 330 行
JAVA
330 行
/* * Copyright (c) 1998-2008 Caucho Technology -- all rights reserved * * This file is part of Resin(R) Open Source * * Each copy or derived work must preserve the copyright notice and this * notice unmodified. * * Resin Open Source is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * Resin Open Source is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty * of NON-INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with Resin Open Source; if not, write to the * Free SoftwareFoundation, Inc. * 59 Temple Place, Suite 330 * Boston, MA 02111-1307 USA * * @author Scott Ferguson */package com.caucho.log;import com.caucho.config.ConfigELContext;import com.caucho.config.ConfigException;import com.caucho.config.types.RawString;import com.caucho.el.AbstractVariableResolver;import com.caucho.el.ELParser;import com.caucho.el.Expr;import com.caucho.util.L10N;import javax.annotation.PostConstruct;import javax.el.ELContext;import javax.el.ELException;import java.util.ResourceBundle;import java.util.logging.Level;import java.util.logging.LogRecord;/** * A Formatter that accepts an EL format string, and. */public class ELFormatter extends MessageFormatter { static final L10N L = new L10N(ELFormatter.class); private String _format; private Expr _expr; public void setFormat(RawString format) { _format = format.getValue(); } public String getFormat() { return _format; } @PostConstruct public void init() throws ConfigException { if (_format != null) { try { _expr = (new ELParser(new ConfigELContext(), _format)).parse(); } catch (Exception ex) { throw ConfigException.create(ex); } } } public String format(LogRecord logRecord) { if (_expr == null) { return super.format(logRecord); } String ret; if (_expr == null) { ret = super.format(logRecord); } else { try { ELFormatterVariableResolver vr = new ELFormatterVariableResolver(); vr.setLogRecord(logRecord); ret = _expr.evalString(new ConfigELContext(vr)); } catch (Exception ex) { throw new RuntimeException(ex); } } return ret; } class ELFormatterVariableResolver extends AbstractVariableResolver { ELFormatterLogRecord _logRecord; public void setLogRecord(LogRecord logRecord) { _logRecord = new ELFormatterLogRecord(logRecord); } @Override public Object getValue(ELContext env, Object base, Object property) throws ELException { if (base != null || ! (property instanceof String)) return null; if ("log".equals(property)) { env.setPropertyResolved(true); return _logRecord; } return null; } } /** * An api similar to java.util.logging.LogRecord that provides more complete * information for logging purposes. */ public class ELFormatterLogRecord { LogRecord _logRecord; ELFormatterLogRecord(LogRecord logRecord) { _logRecord = logRecord; } /** * The "formatted" log message, after localization, substitution of * parameters, and the inclusion of an exception stack trace if applicable. * <p> * During formatting, if the source logger has a localization * ResourceBundle and if that ResourceBundle has an entry for * this message string, then the message string is replaced * with the localized value. * <p> * If the message has parameters, java.text.MessageFormat is used to format * the message with the parameters. * <p> * If the log record has an associated exception, the stack trace is * appended to the log message. * * @see java.text.MessageFormat * @see java.lang.Throwable.printStackTrace() */ public String getMessage() { /** use the formatMessage() method of the outer class */ return formatMessage(_logRecord); } /** * The source Logger's name. * * @return source logger name, which may be null */ public String getName() { return _logRecord.getLoggerName(); } /** * The source Logger's name. * * @return source logger name, which may be null */ public String getLoggerName() { return _logRecord.getLoggerName(); } /** * The last component of the source Logger's name. The last component * is everything that occurs after the last `.' character, usually * it is the class name. * * * @return short version of the source logger name, or null */ public String getShortName() { String name = _logRecord.getLoggerName(); if (name != null) { int index = name.lastIndexOf('.') + 1; if (index > 0 && index < name.length()) { name = name.substring(index); } } return name; } /** * The logging message level, for example Level.INFO. * * @see java.util.logging.Level */ public Level getLevel() { return _logRecord.getLevel(); } /** * The time of the logging event, in milliseconds since 1970. */ public long getMillis() { return _logRecord.getMillis(); } /** * An identifier for the thread where the message originated. */ public int getThreadID() { return _logRecord.getThreadID(); } /** * The throwable associated with the log record, if one was associated. */ public Throwable getThrown() { return _logRecord.getThrown(); } /** * The sequence number, normally assigned in the constructor of LogRecord. */ public long getSequenceNumber() { return _logRecord.getSequenceNumber(); } /** * The name of the class that issued the logging request. * This name may be unavailable, or not actually the name of the class that * issued the logging message. */ public String getSourceClassName() { return _logRecord.getSourceClassName(); } /** * The last component of the name (everthing after the last `.') of the * class that issued the logging request. * This name may be unavailable, or not actually the name of the class that * issued the logging message. * * @return short version of the sourceClassName */ public String getShortSourceClassName() { String name = _logRecord.getSourceClassName(); if (name != null) { int index = name.lastIndexOf('.') + 1; if (index > 0 && index < name.length()) { name = name.substring(index); } } return name; } /** * The name of the method that issued the logging request. This name * may be unavailable, or not actually the name of the class that issued * the logging message. */ public String getSourceMethodName() { return _logRecord.getSourceMethodName(); } /** * The "raw" log message, before localization or substitution * of parameters. * <p> * This returned message will be either the final text, text containing * parameter substitution "format elements" (like `{0}') for use by * java.text.MessageFormat, or a localization key. * * @see java.text.MessageFormat */ public String getRawMessage() { return _logRecord.getMessage(); } /** * The resource bundle for localization. */ public ResourceBundle getResourceBundle() { return _logRecord.getResourceBundle(); } /** * The name of resource bundle for localization. */ public String getResourceBundleName() { return _logRecord.getResourceBundleName(); } public Object[] getParameters() { return _logRecord.getParameters(); } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?