Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.util.logging-如何从应用程序';什么是运行时间?(HSQLDB)_Java_Logging_Formatting_Hsqldb_Java.util.logging - Fatal编程技术网

java.util.logging-如何从应用程序';什么是运行时间?(HSQLDB)

java.util.logging-如何从应用程序';什么是运行时间?(HSQLDB),java,logging,formatting,hsqldb,java.util.logging,Java,Logging,Formatting,Hsqldb,Java.util.logging,在我的应用程序中,我想要一些格式化方法。 为此,我编写了一个SingleLineFormatter extends Formatter 现在我正试图设置所有记录器以使用它,但无法解决这个问题 LogManager.getLogManager().readConfiguration((InputStream) configIS); Collections.list(LogManager.getLogManager().getLoggerNames()).forEa

在我的应用程序中,我想要一些格式化方法。 为此,我编写了一个
SingleLineFormatter extends Formatter

现在我正试图设置所有
记录器
以使用它,但无法解决这个问题

        LogManager.getLogManager().readConfiguration((InputStream) configIS);

        Collections.list(LogManager.getLogManager().getLoggerNames()).forEach(
            loggerName -> {
                List<Handler> handlers = Arrays.asList(Logger.getLogger(loggerName).getHandlers());
                System.out.println(" * Logger " + loggerName + ": " + handlers.size());
                handlers.forEach(handler -> System.out.println("   HF: " + handler.getFormatter()));
                //handlers.forEach(handler -> handler.setFormatter(new SingleLineFormatter()));
            }
        );/**/
        log.info("Logging test");
但是,
记录器的其余部分仍然使用它们配置的任何东西。可能只是七月的违约

Oct 02, 2018 10:42:10 PM org.hsqldb.persist.Logger logInfoEvent
INFO: checkpointClose start
我知道我可以在JVM中通过JUL的
logging.properties
来管理它。
但我想发布应用程序,并希望所有日志消息的格式相同

如何强制使用我的
格式化程序格式化所有将于7月发送的邮件?

-Djava.util.logging.config.file=/path/to/app.properties
,但这超出了我的特定案例的范围。(而且无论如何都不起作用。)

更新:看起来第三方日志记录不会在7月份完成。所以问题是-如果是这样,我如何配置其他框架

这是正在加载到
LogManager
的文件。有相当多的实验,所以不是所有的信号都是正确的

# Handlers
handlers = java.util.logging.ConsoleHandler java.util.logging.FileHandler

# Console
# The logging of the app actually reacts to this line.
java.util.logging.ConsoleHandler.formatter = cz.dynawest.logging.SingleLineFormatter
#java.util.logging.ConsoleHandler.formatter = cz.dynawest.logging.SimplestFormatter
java.util.logging.ConsoleHandler.level = ALL

# File
java.util.logging.FileHandler.level = ALL
java.util.logging.FileHandler.pattern = app.log
java.util.logging.FileHandler.formatter = cz.dynawest.logging.SingleLineFormatter
java.util.logging.FileHandler.limit = 0
java.util.logging.FileHandler.append = true


# Default global logging level.
.formatter = cz.dynawest.logging.SimplestFormatter
.level = INFO

#global.formatter = cz.dynawest.logging.SimplestFormatter
#root.formatter = cz.dynawest.logging.SimplestFormatter
#cz.dynawest.csvcruncher.App.formatter = cz.dynawest.logging.SimplestFormatter
#cz.dynawest.csvcruncher.App.handlers = java.util.logging.ConsoleHandler
#.useParentHandlers = false

# Various customizations.

org.apache.commons.beanutils.converters.level=INFO

为了符合lib可能希望我用于日志记录的内容,我切换到SLF4J和Logback。没有帮助

因此,我查看了导致日志记录问题的特定库—HSQLDB

问题是,它试图掌握所有通用框架,却绕过了我在外部配置它的尝试。以下是一个例子:

然后我发现:

HyperSQL还支持log4J和JDK日志记录。传递给内部日志的事件信息与传递给外部日志框架的事件信息相同。这些框架通常在HyperSQL外部配置。日志消息包括字符串“hsqldb.db.”,后跟生成消息的数据库的唯一id(16个字符的字符串),因此可以在多数据库服务器上下文中识别它们

由于默认的JDK日志框架有几个缺点,HyperSQL配置此日志框架以实现更好的操作。如果不希望HyperSQL配置JDK日志框架,则应在环境中包含系统级属性hsqldb.reconfig_logging=false

我尝试设置
hsqldb.db.
Logger,但没有成功

所以我想我会坚持使用JUL,并关闭
hsqldb.reconfig\u logging=false

顺便说一下

在我的应用程序中,我想要一些格式化方法。为此,我编写了一个>SingleLineFormatter extends Formatter

自从jdk7之后

这将读取配置,并将其应用于找到的所有处理程序

Oct 02, 2018 10:42:10 PM cz.dynawest.logging.LoggingUtils initLogging
INFO: Log config file not found: #/logging.properties  Using LoggingUtils' default.
 * Logger cz.dynawest.csvcruncher.App: 0
 * Logger global: 0
 * Logger cz.dynawest.logging.LoggingUtils: 0
2018-10-02 22:42:10 INFO cz.dynawest.logging.LoggingUtils initLogging:   Logging test
 * Logger : 2
   HF: cz.dynawest.logging.SingleLineFormatter@34c45dca
   HF: cz.dynawest.logging.SingleLineFormatter@52cc8049
JUL将仅在代码需要记录器时加载处理程序。因此,可能会错过处理程序,因为记录器本身尚未创建

我如何强制所有将于7月发送的邮件使用我的格式化程序进行格式化

有-Djava.util.logging.config.file=/path/to/app.properties,但这超出了我的特定案例的范围。(而且无论如何都不起作用。)

您已经在访问LogManager,因此可以从Java设置属性,如下所示:

 private static void loadProperties() {
    Properties props = new Properties();
    props.put("java.util.logging.ConsoleHandler.formatter", "cz.dynawest.logging.SingleLineFormatter");
    props.put("org.apache.commons.beanutils.converters.level", "INFO");

    try(ByteArrayOutputStream out = new ByteArrayOutputStream()) {
        props.store(out, "");
        LogManager.getLogManager().readConfiguration(new ByteArrayInputStream(out.toByteArray()));
    } catch (IOException ioe) {
        throw new AssertionError(ioe);
    }
}
如果您运行的是JDK 9或更高版本,那么应该使用

看起来第三方日志记录没有经过7月。所以问题是——如果是这样,我该如何配置其他框架


您必须确定这些框架是否相互路由。您只需更改将记录发布到输出源的框架的格式即可。

一种方法是在应用程序中使用静态字符串,例如

private static Logger logger = Logger.getLogger("some_value");