【问题标题】:JAVA SimpleFormatter, is impossible to set the regexJAVA SimpleFormatter,无法设置正则表达式
【发布时间】:2012-10-05 11:32:01
【问题描述】:

我正在向我的程序中添加一个记录器,在网上冲浪我在我的代码中添加了一个非常简单的记录器,它具有基本的 2 行定义:

private static final Logger LOG = Logger.getLogger(GUI.class.getName());

public MyClass(){

    //other stuff...
    LOG.info("text to log");
    //other stuff...
}

经过几个小时的开发,我想知道如何格式化记录文本的样式,于是我来到了这门课:

java.util.logging.SimpleFormatter

阅读我可以找到的 Javadoc:

可以通过在 java.util.logging.SimpleFormatter.format 属性中指定格式字符串来自定义格式。

也有几个例子:

Some example formats:
java.util.logging.SimpleFormatter.format="%4$s: %5$s [%1$tc]%n"
This prints 1 line with the log level (4$), the log message (5$) and the timestamp (1$) in a square bracket.

WARNING: warning message [Tue Mar 22 13:11:31 PDT 2011]

我尝试了其中的每一个,但“格式”字段是“不可见的”(我想是私人的)所以我不能直接编辑它。没有类似的方法 setStringVar(字符串正则表达式); 从外部设置 var。

我试图扩展类 公共类 MyClass 扩展 SimpleFormatter{

但“格式”变量不可编辑。我也尝试过扩展 Formatter(SimpleFormatter 的超类),但没有成功。

我唯一能做的就是扩展 SimpleFormatter 并手动覆盖它: 公共字符串格式(LogRecord rec); 带有无聊而复杂的代码。

我只是想知道是否有任何方法可以简单地使用 SimpleFormatter 类的内部正则表达式阅读器

编辑:错误

【问题讨论】:

标签: java regex logging formatting string-formatting


【解决方案1】:

你看过JavaDoc。它概述了 SimpleFormatter。

另外,format 是 SimpleFormatter 中的公共方法。

更进一步

java.util.logging.SimpleFormatter.format="%4$s: %5$s [%1$tc]%n"

应该在属性文件而不是 Java 类中定义。

说实话,我不使用 java.util.logging 我使用的是 Fildor 提到的 log4j。我觉得简单多了。首先你需要一个配置文件,比如下面的 log4j.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
<log4j:configuration>
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d %5p %c{1}:%L - %m%n"/>
        </layout>
    </appender>
    <root>
        <priority value="debug"></priority>
        <appender-ref ref="stdout"/>
    </root>
</log4j:configuration>

您可以随意调整转换模式,详情请参阅PatternLayout。然后在你的类中定义以下私有静态成员

static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(Testing.class);

当你想输出日志的时候就这么做:

LOG.error("Test Error");

【讨论】:

  • 感谢您的帮助,我没有注意到配置参数需要在配置文件中的行。解决的问题:尝试 { LogManager.getLogManager().readConfiguration(new FileInputStream("conf/logger.properties")); } catch (Exception e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } System.out.println("#### " + LogManager.getLogManager().getProperty("java.util.logging.SimpleFormatter.format"));
  • 我错了。我解决不了。我只能加载属性,但程序似乎不遵循我的格式。知道为什么吗?
【解决方案2】:

这个LINK 是关于如何配置Java 标准日志(德语)的。我现在正试图找到一个类似的英文...

同时: 我没有使用 util.logging,但对于我在上面的链接中阅读的内容,我想你必须实现自己的格式化程序。

Here你用英文说。

顺便说一句:我推荐 log4j 或 slf4j/logback。

【讨论】:

  • 为什么不推荐标准日志记录?
  • 快速回答:个人品味。在许多项目中,我使用 log4j 并发现它非常灵活,而在其他项目中,我使用了我喜欢的 slf4j 和 logback。它速度快(如果做得好),易于配置,我喜欢它的 API。所以并不是我_dis_courage使用java自带的logging api,从早期以来也有很大改进,我只是更喜欢其他两个。尤其是在编写库时。
  • log4j 的 appender 也比 util.logging 多得多。您可以自动拥有滚动文件、记录到系统日志、数据库...
  • 我读过你的链接,我以前读过,但他们告诉我们扩展类(这就是我所做的)不仅仅是使用 SimpleFormatter,我想知道那个“愚蠢”字段“格式" 就像Edit 说的那样是可编辑的,阅读前面的答案,事实是该行进入了配置文件。
猜你喜欢
  • 2016-06-18
  • 2015-12-29
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
  • 2013-01-18
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多