- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我希望带有 FileHandler 的记录器使用配置文件中定义的设置。使用 LogManager.readConfiguration(InputStream) 后是否必须使用 Logger.getLogger 或 Logger.addHandler(new FileHandler()) 还是还有更多内容?换句话说,我应该按照什么顺序执行以下三件事(getLogger、addHandler、readConfigurations),假设它与顺序有关而不是其他事情?
我找不到很多这样的例子,我发现的例子在 Logger.getLogger 之后有 LogManager.readConfiguration,但这似乎不起作用。
这是配置文件:
handlers = java.util.logging.FileHandler
.level = ALL
# Default
java.util.logging.FileHandler.limit = 10000000
java.util.logging.FileHandler.count = 10
java.util.logging.FileHandler.append = true
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = FINE
编辑:这是与配置相关的代码部分。
String configFilename = "C:\\Users\\dalawh\\Documents\\config.properties";
LogManager manager = LogManager.getLogManager();
String property = manager.getProperty(this.getClass().getPackage().getName()); //DEBUGGING
LogManager.getLogManager().readConfiguration(new FileInputStream(configFilename));
String property2 = manager.getProperty(this.getClass().getPackage().getName()); //DEBUGGING
Logger logger = java.util.logging.Logger.getLogger(this.getClass().getPackage().getName());
String property3 = manager.getProperty(this.getClass().getPackage().getName()); //DEBUGGING
String filename = "C:\\Users\\dalawh\\Documents\\log.log";
this.fileHandler = new FileHandler(filename);
this.logger.addHandler(this.fileHandler);
最佳答案
与此相关的是:configure Logger via global config file .
对 LogManager.readConfiguration 的调用将确定 logger.getLogger 将返回的内容。如果您在属性文件中定义了处理程序,则以后无需添加该处理程序。如果您想使用代码添加处理程序,那么您正在寻找的解决方案是:
如果您在启动脚本中将 java.util.logging.config.file
定义为系统属性,则无需编写任何代码。
-Djava.util.logging.config.file="文件路径"
有关更多信息,请阅读LogManager类级别文档。
如果您无法在启动时定义该属性,那么您可以求助于 LogManager.readConfiguration(InputStream)方法来执行设置。除非遇到JDK-8033661 readConfiguration does not cleanly reinitialize the logging system,否则您不必调用任何其他方法或者 JDK-5035854 LogManager.readConfiguration does not properly modify existing loggers .
如果这些选项都不起作用,您可以仅获取记录器并根据需要调用配置方法。
要解决您的问题,请添加以下内容:
String configFilename = "C:\\Users\\dalawh\\Documents\\config.properties";
System.out.println(new File(configFilename).length());
LogManager manager = LogManager.getLogManager();
LogManager.getLogManager().readConfiguration(new FileInputStream(configFilename));
String property = manager.getProperty("java.util.logging.FileHandler.formatter"); //DEBUGGING
System.out.println(property);
这是一个简单的测试来证明日志管理器的工作原理。
public class LogManagerTest {
public static void main(String[] arg) throws IOException {
read(LogManager.getLogManager(), create());
FileHandler h = new FileHandler();
h.close();
System.out.println(h.getFormatter());
}
private static Properties create() {
Properties props = new Properties();
props.setProperty("java.util.logging.FileHandler.formatter",
"java.util.logging.SimpleFormatter");
return props;
}
private static void read(LogManager manager, Properties props) throws IOException {
final ByteArrayOutputStream out = new ByteArrayOutputStream(512);
props.store(out, "No comment");
manager.readConfiguration(new ByteArrayInputStream(out.toByteArray()));
}
}
关于java - 如何让 Logger 使用 LogManager.readConfigurations 中的配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25964698/
我正在使用Visualvm工具并尝试通过jmx建立远程连接。我需要连接到我的远程服务器 ubuntu 14.04。我的 Web 应用程序在 Docker 上运行,jboss/wildfly 在 doc
有人可以详细解释一下吗?在网上搜索但没有得到满意的答案。我正在使用 NLog 登录 csv 文件。 LogManager.GetLogger 方法工作正常,但如果我将使用 LogManager.Get
我有一个运行 Web 应用程序的 WebSphere 应用程序服务器。我从 Eclipse 启动服务器。该应用程序中的主要日志记录框架是 log4j2,但也有一些使用 java.util.loggin
我正在尝试编写一个简单的 log4j2 日志消息。 代码如下所示: package com.company; import java.io.IOException; import org.apache
我已将使用 nuget 的 NLog 添加到项目中并添加了 NLog.config。由于 LogManager.Configuration 为 null,我正在运行调试器并收到 NullReferen
为什么大多数 log4net 示例通过这样做来获取类的记录器: private static ILog logger = LogManager.GetLogger( System.Re
当我执行以下代码时,日志事件仅记录一次。我正在使用 log4j2 记录器。但是当我使用 java.util.logger 时,所有 3 个日志事件均已成功发布。 public class Tes
我知道应该通过 LogManager.getLogger() 创建一个 log4j 记录器实例,它会执行一些反射魔法来检测调用类,因此名称对于特定的日志级别配置很重要。但是,如果我不喜欢手动创建记录器
我正在处理一些遗留代码,其中包含很多代码 private final Logger logger = LogManager.getLogger(ThisClassName.class); 我想知道输入
我有一个重新配置 log4j2 的方法,如下所示: LogManager.shutdown(); // SHUTDOWN log4j2 InputStream in = getClass().
在我的项目中,我得到了一个 NLog.config 文件,但是当我在我的项目中调试 Main 方法时,NLog.LogManager.Configuration 是无效的。 如何确保找到 NLog.c
鉴于此类: class Foo { readonly ILog log; public Foo(ILog log) { this.log = log;
我正在使用 Log4j2,默认记录器实现已在我的项目中广泛使用。我现在需要解析日志消息并替换某些关键字,然后再将它们记录到日志文件中。满足此要求的一个好方法可能是重写记录器方法,例如 info()、e
在我的项目中,我得到了一个 NLog.config 文件,但是当我在我的项目中调试 Main 方法时,NLog.LogManager.Configuration 是无效的。 如何确保找到 NLog.c
我正在尝试使用 log4j 的当前版本 2.0 beta。我已经包含了 log4j 的所有必需的 jar 文件。启动应用程序只会带来: Exception in thread "main" java.
我的 Java 程序在 Linux 上运行,需要在关闭之前关闭一些文件句柄(实际上是设备),因此我在 JVM 上添加了一个关闭 Hook 。但是,我注意到 java.util.logging.LogM
这将是一个冗长的问题,但请耐心等待。我正在尝试为我们的应用程序创建一个日志记录组件,它可以扩展为插入新的日志记录框架(NLog、Log4Net ec)。现在我知道我们已经有了由 Ben Foster
我有带有 log4net 配置的自定义 xml 文件。下面的代码用于配置 log4net。它工作正常。 问题是 LogManager.Getlogger 在不知道配置文件详细信息时如何获取“MyLog
我遇到了一个让我非常困惑的问题。我想尝试使用 JUL 日志记录(JDK 日志记录)做一些事情。我从以下简单程序开始: package biz.ple; import java.util.logging
我希望带有 FileHandler 的记录器使用配置文件中定义的设置。使用 LogManager.readConfiguration(InputStream) 后是否必须使用 Logger.getLo
我是一名优秀的程序员,十分优秀!