我喜欢拦截一些(最重要的)日志消息并将它们显示在 GUI 中或检查是否记录了任何错误。通常我使用 java.util.logging
,这里使用 java.util.logging.Handler
和 java.util.logging.Formatter
。
然而,当前项目使用 Log4J (2.x),并且每个功能都有不同的名称,并且似乎至少复杂四倍。
任何人都可以给我一些关于如何使用 Log4J 归档此类内容的提示吗:
/**
* <p>
* logs error so they can be returned to the server (and tested in unit tests)
* </p>
*
* @author "Martin Krischik" <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="2944485b5d404707425b405a4a4140426947465a4c5b074a4644" rel="noreferrer noopener nofollow">[email protected]</a>>
* @version 1.0 $Revision: 2229 $
* @see java.util.logging.Handler
* @since 1.0
*/
@SuppressWarnings ("synthetic-access")
protected final class LogHandler
extends
java.util.logging.Handler
{
/**
* <p>
* A very simple formatter which displays only what is relevant to end users. Developer
* should look at the log file
* </p>
*
* @author "Martin Krischik" <<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="d1bcb0a3a5b8bfffbaa3b8a2b2b9b8ba91bfbea2b4a3ffb2bebc" rel="noreferrer noopener nofollow">[email protected]</a>>
* @version 1.0 $Revision: 2229 $
* @see java.util.logging.Formatter
* @since 1.0
*/
private class LogFormatter
extends
java.util.logging.Formatter
{
/**
* <p>
* line separator
* </p>
*/
private final String lineSeparator = System.getProperty ("line.separator");
/**
* <p>
* Format the given LogRecord.
* </p>
*
* @param record
* the log record to be formatted.
* @return a formatted log record
* @see java.util.logging.Formatter#format(java.util.logging.LogRecord)
*/
@Override
public synchronized String format (final java.util.logging.LogRecord record)
{
final StringBuilder retval = new StringBuilder (4096);
final String message = this.formatMessage (record);
final java.util.logging.Level level = record.getLevel ();
retval.append (level.getLocalizedName ());
retval.append (": ");
retval.append (message);
retval.append (this.lineSeparator);
return retval.toString ();
} // format
} // LogFormatter
/**
* <p>
* A very simple formatter which displays only what is relevant to end users. Developer
* should look at the log file
* </p>
*/
private final DBUpdate.LogHandler.LogFormatter formatter =
new DBUpdate.LogHandler.LogFormatter ();
/**
* @throws SecurityException
* some severity error
* @see java.util.logging.Handler#close()
*/
@Override
public void close ()
throws SecurityException
{
return;
} // close
/**
* @see java.util.logging.Handler#flush()
*/
@Override
public void flush ()
{
return;
} // flush
/**
* @param record
* record to log.
* @see java.util.logging.Handler#publish(java.util.logging.LogRecord)
*/
@Override
public void publish (final java.util.logging.LogRecord record)
{
if (record.getLevel ().intValue () >= this.getLevel ().intValue ())
{
REST_Responce.this.errorMessages.add (this.formatter.format (record));
} // if
return;
} // publish
} // LogHandler
最佳答案
您可以尝试子类化 AbstractAppender .
- Appender映射到 Handler
- Layout映射到 Formatter
- ErrorHandler映射到 ErrorManager
关于log4j - log4J 的 java.util.logging.Handler 等价物是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25844141/