标签: java.util.logging

将TimeStamp附加到Java util logger的日志文件名中

目前我正在使用Java util将日志记录到可以配置的文件中java.util.logging.FileHandler.pattern.我想在日志文件名中附加一个时间戳.我还必须从java.util.logging.FileHandler.pattern属性中获取日志文件路径.

java java.util.logging

7
推荐指数
2
解决办法
1万
查看次数

Java Logging API生成空日志文件

我试图浏览Java日志API的教程:

www.vogella.com/articles/Logging/article.html

但是生成的文件是空的(在Netbeans,Eclipse中测试以及从cmd运行jar).日志消息仅显示在控制台中.

以下是项目中使用的文件.这种行为可能是什么原因?

项目:de.vogella.logger

MyHtmlFormatter.java

package de.vogella.logger;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogRecord;

//This custom formatter formats parts of a log record to a single line
class MyHtmlFormatter extends Formatter {
  // This method is called for every log records
  public String format(LogRecord rec) {
    StringBuffer buf = new StringBuffer(1000);
    // Bold any levels >= WARNING
    buf.append("<tr>");
    buf.append("<td>");

    if (rec.getLevel().intValue() >= Level.WARNING.intValue()) {
      buf.append("<b>");
      buf.append(rec.getLevel());
      buf.append("</b>");
    } else {
      buf.append(rec.getLevel());
    }
    buf.append("</td>");
    buf.append("<td>"); …
Run Code Online (Sandbox Code Playgroud)

java api logging java.util.logging

7
推荐指数
1
解决办法
3450
查看次数

使用<ant>任务调用的构建文件将重置调用者的日志记录配置

两个项目:产品(项目-A)和A(项目-B)的汽车基准项目.

在B的构建文件中,我们需要调用A的构建文件来运行构建和bundle-with-app-server过程,如下所示:

<ant antfile="${build-file-A}" inheritall="false" target="all" />
Run Code Online (Sandbox Code Playgroud)

而且,在项目B中,我们有许多使用java.util.logging(JDK Logging Framework)输出消息的Ant任务.

问题是,在该行之后,所有jdk记录器输出都消失了.

通过调试,我发现在项目A的构建文件初始化过程中,项目A中的静态定义的东西将运行LogManager.readConfiguration(InputStream),它会加载一个仅包含单个类的记录器配置的配置文件.

在期间readConfiguration,LogManager.reset()将被称为; 在期间reset,每个记录器的每个处理程序都将被删除.由于<ant>将目标构建文件加载到调用者的同一进程,因此将删除所有处理程序.

因此,除了可配置的类之外,由于缺少输出处理程序,使用jdk logger的每个其他类都无法输出消息.

我的问题是:

有没有办法解决这个问题,除了:

  1. 用于<exec>运行项目A的构建文件;
  2. 编写一个要运行的任务,readConfiguration()以便在<ant>调用后从默认配置文件中恢复默认的JDK日志记录设置.
  3. 使用ant自己的日志框架(Task.log()等).

请注意,我无法修改项目A以防止出现此问题.

java ant logging java.util.logging

7
推荐指数
1
解决办法
361
查看次数

如何将记录器包装在slf4j中?

是否可以将记录器包装为slf4j?

例如,在调试模式下,当我检查时org.slf4j.LoggerFactory.getLogger(loggerName),我可以看到记录器(这里java.util.logging):

java.util.logging记录器

我想做的事情如下:

// Get the real logger, cast in java.util.logging
java.util.logging.Logger myLogger = LoggerFactory.getLogger(loggerName))...;
// Use the java.util.logging methods
myLogger.setLevel(Level.parse(level)); 
Run Code Online (Sandbox Code Playgroud)

java logging slf4j java.util.logging

7
推荐指数
1
解决办法
1968
查看次数

Tomcat7记录地狱 - 为什么会出现两种不同的格式?

logging.properties在Eclipse这个样子,当我最初发布这个问题:

handlers = java.util.logging.ConsoleHandler

org.apache.catalina.core=OFF

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=JUL %4$s: %2$s%n%4$s: %5$s%n
Run Code Online (Sandbox Code Playgroud)

我在使用此配置的Linux服务器上遇到同样的问题:

handlers = 2localhost.org.apache.juli.FileHandler, org.apache.juli.FileHandler

.handlers = org.apache.juli.FileHandler

2localhost.org.apache.juli.FileHandler.level = INFO
2localhost.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.FileHandler.prefix = localhost.

org.apache.juli.FileHandler.level = ALL
org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter
org.apache.juli.FileHandler.directory = ${catalina.base}/logs
java.util.logging.SimpleFormatter.format=tomcat: %4$s: %2$s%n%4$s: %5$s%n

org.apache.catalina.handlers = org.apache.juli.FileHandler
org.apache.catalina.startup.level = SEVERE
org.apache.catalina.session.ManagerBase.level = SEVERE
org.apache.catalina.core.AprLifecycleListener.level=SEVERE
org.apache.catalina.connector.level = SEVERE
org.apache.coyote.level=SEVERE

org.apache.catalina.level=ALL
org.apache.catalina.startup.HostConfig.level = SEVERE
org.apache.catalina.loader.WebappClassLoader.level = SEVERE
org.apache.catalina.session.ManagerBase.level = INFO

# ServletContext logger
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = ALL
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].handlers = 2localhost.org.apache.juli.FileHandler …
Run Code Online (Sandbox Code Playgroud)

eclipse linux logging java.util.logging tomcat7

7
推荐指数
1
解决办法
1197
查看次数

Java日志框架,不需要在每个类上使用LOGGER声明

我尝试了以下记录器

  • Java Logging API
  • Log4j的
  • SLF4J

所有这些都需要在类级别进行LOGGER声明,如下所示

private final static java.util.logging.Logger.Logger LOGGER = java.util.logging.Logger.Logger.getLogger(MyClass.class.getName());
private final Logger slf4jLogger = LoggerFactory.getLogger(SLF4JHello.class);
private final static Logger log4jLogger = Logger.getLogger(Log4jHello.class);
Run Code Online (Sandbox Code Playgroud)

这看起来很可怕,java中是否有一个不需要此声明的记录器框架?

我正在寻找的是,我可以有一个全球宣言

private final static Logger Logger = Logger.getLogger(MyApp.class);
Run Code Online (Sandbox Code Playgroud)

但是当我从类XXX.class 调用Logger.log(..)时,Logger应该使用XXX.class名称.

java logging log4j slf4j java.util.logging

7
推荐指数
1
解决办法
778
查看次数

如何在Spring Boot中关闭"NioEndPoint"登录?

我正在开发一个Spring Boot Web应用程序,我将一个长时间运行的进程添加到ScheduledExecutorService.

为了确保它的行为方式,我认为我正在使用System.out.println()来调试长时间运行的进程.

我的问题是我不断得到这些

NioEndpoint FINER | 超时完成:处理的密钥= 1; 现在= 1492721057929; nextExpiration = 1492721057927; keyCount = 0; hasEvents = FALSE; eval = false {timeout()/ 18} 04:44.714 NioEndpoint FINER | 超时完成:处理的密钥= 0; 现在= 1492721058713; nextExpiration = 1492721058712; keyCount = 0; hasEvents = FALSE; eval = false {timeout()/ 17} 04:44.931 NioEndpoint FINER | 超时完成:处理的密钥= 1; 现在= 1492721058931; nextExpiration = 1492721058929; keyCount = 0; hasEvents = FALSE; eval = false {timeout()/ 18} 04:44.718 NioEndpoint FINER | 超时完成

在输出窗口中发送垃圾邮件,这使得破解其他日志记录变得不可能.

我尝试添加logging.level.root=ERROR到application.properties,但是没有删除它们.

如何让它们不显示以及它们表示什么? …

java spring java.util.logging spring-boot

7
推荐指数
1
解决办法
2489
查看次数

Java写入Windows Server 2016时,文件上次修改时未更新

我在Windows Server 2016上有一个Java 10应用程序,它使用java.util.logging不断写入文件.在Windows文件资源管理器中,"上次修改"和"大小"列不会更新.按[F5]不会更新详细信息.DOS DIR给出了同样错误的答案.右键单击>属性>详细信息提供了一个甚至不同(和更旧)的答案.

TYPE在文件的记事本中运行DOS 或打开/关闭(不保存),似乎导致文件资源管理器和DOS DIR更新.

我假设Java代码是正确的,flush()因为Windows Server 2008上的Java 8上的相同类导致文件资源管理器更新.另外,当运行TYPE和记事本时,我也看到与系统时钟匹配的带时间戳的记录,但在"上次修改"之后.

所以我假设Windows Server 2016有一些东西.任何想法要检查什么?

java java.util.logging java-10 windows-server-2016

7
推荐指数
1
解决办法
830
查看次数

如何将java.util.logging重定向到文件?

我有一个使用外部库的java程序.主程序用于log4j记录其消息和库使用java.util.logging.

我的问题是来自外部库和主程序的日志消息在控制台中混合.

我想将来自外部库的所有日志消息重定向到文件.我试着用logging.properties文件做到这一点:

handlers= java.util.logging.FileHandler
.level= INFO
java.util.logging.FileHandler.pattern = foo.log
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
Run Code Online (Sandbox Code Playgroud)

该文件初始化为:

System.setProperty("java.util.logging.config.file", "logging.properties");
Run Code Online (Sandbox Code Playgroud)

不幸的是,来自外部库的日志消息不断出现在控制台中.我应该使用类似slf4j拦截日志消息的东西java.util.logging吗?

感谢您的时间.

java redirect file java.util.logging

6
推荐指数
1
解决办法
8120
查看次数

如何配置特定FileHandler的属性

Java日志记录配置文件允许我定义命名记录器的属性,例如

name.heikoseeberger.heikotron.level = FINE
name.heikoseeberger.heikotron.handlers = java.util.logging.FileHandler
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.现在我想配置特定的 FileHandler,例如使用特定的输出文件.不幸的是我只知道如何配置已存在于配置文件中的"全局" FileHandler:

java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 50000
java.util.logging.FileHandler.count = 1
java.util.logging.FileHandler.formatter = java.util.logging.XMLFormatter
Run Code Online (Sandbox Code Playgroud)

我不想配置这个,而是与我的自定义Logger相关联的实例.我已经尝试了以下内容,但没有成功:

name.heikoseeberger.heikotron.java.util.logging.FileHandler.pattern = %h/heikotron.log
name.heikoseeberger.heikotron.java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
Run Code Online (Sandbox Code Playgroud)

是否可以设置特定FileHandler实例的属性?如果是,那么如何识别/命名?

java logging java.util.logging

6
推荐指数
1
解决办法
3059
查看次数