标签: java.util.logging

Java 日志记录打开“太多”日志文件

这有点奇怪,但我对日志记录包及其属性的使用很陌生。我通过谷歌搜索可以找到的所有问题都是“如何使日志记录打开多个文件?” 但我今天的问题是如何让它停止同时处理多个文件。开始了...

首先,这个项目仅限于使用 java.util.logging,不,我不能切换到 log4j 或任何其他第三方包,是的,我知道它们应该更棒。:-)

所以当这个小程序启动时,它会运行这段代码:

import java.util.logging.Logger;
import java.util.logging.LogManager;

// in startup routine:
LogManager.getLogManager().readConfiguration(
  this.getClass().getResourceAsStream("/logging.properties"));
Run Code Online (Sandbox Code Playgroud)

从 JAR 中提取属性文件并应用它们,这是有效的。应该readConfiguration()从虚拟机启动时重置所有现有设置。该项目的其余部分有类似的行

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

我认为这是相当标准的。我们所有的类都在同一个包中(例如,将其称为 TheProject),并且时髦的日志记录名称/属性层次结构遵循相同的约定,因为这正是 java.util.logging 喜欢的方式。

logging.properties 文件一开始是 Java 6 SE JRE 附带的文件的副本,然后进行了修改。现在看起来像这样:

handlers=java.util.logging.FileHandler,java.util.logging.ConsoleHandler

# Default global logging level. 
.level=INFO

# Loggers 
# ------------------------------------------ 
# Loggers are usually attached to packages. 
# Here, the level for each package is specified. 
# The global level is used by default, so levels 
# …
Run Code Online (Sandbox Code Playgroud)

java java.util.logging

5
推荐指数
1
解决办法
2957
查看次数

tomcat 日志中 SLF4JBridgeHandler 中的处理程序错误

我的 tomcat 日志当前混合了不同格式的日志消息。所以我尝试使用 JUL 到 SLF4J 桥来设置 SLF4J。

我最初收到的日志消息如下

五月 23, 2013 7:57:17 PM org.apache.catalina.core.StandardService startInternal
INFO: 启动服务 Catalina
五月 23, 2013 7:57:17 PM org.apache.catalina.core.StandardEngine startInternal
INFO: 启动 Servlet 引擎:Apache Tomcat/7.0.29
2013-05-23 19:57:47,224 [localhost-startStop-1]从类路径资源加载XML bean定义[META-INF/cxf/cxf.xml]
2013-05-23 19: 57:47,246 [localhost-startStop-1] 从类路径资源加载 XML bean 定义 [META-INF/cxf/cxf-servlet.xml]

我从这里关注了博客.. http://hwellmann.blogspot.com/2012/11/logging-with-slf4j-and-logback-in.html

我正在为 SLF4J 使用以下 jar: jul-to-slf4j-1.7.5.jar、slf4j-api-1.7.5.jar

并在logging.properties中

处理程序 = org.slf4j.bridge.SLF4JBridgeHandler

我目前没有收到混合消息,但在启动 tomcat 时收到。它不是打印tomcat格式,而是抛出Handler错误

下面是日志的片段

Handler error
java.lang.ClassNotFoundException: org.slf4j.bridge.SLF4JBridgeHandler
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:521)
    at …
Run Code Online (Sandbox Code Playgroud)

logging tomcat logback slf4j java.util.logging

5
推荐指数
1
解决办法
7101
查看次数

tomcat下指定自定义logging.properties

我想在一个tomcat下有2个web应用程序,这2个项目应该有自己的logging.properties。我知道如果您将logging.properties放入war文件中,这是可能的,但我想指定一个自定义loggin.properties文件(在我部署的war中)。那可能吗?

logging tomcat java.util.logging

5
推荐指数
1
解决办法
3551
查看次数

Spring Boot - 设置使用 Java Util Logging (jul) 的外部 jar 的日志记录级别

根据 Spring Boot 文档,可以通过使用 Spring Boot Logging Starter 并在应用程序属性中设置适当的 logging.level 来设置多个日志记录框架(jul、slf4j 等)的日志记录级别。除了我使用的库使用 jul 和日志级别 Level.FINER 进行日志记录外,一切正常。但是,Level.INFO 已正确记录。

我将 application.properties 中的级别设置为:

logging.level.=TRACE
Run Code Online (Sandbox Code Playgroud)

它应该根据SLF4JBridgeHandler记录所有内容。

我是否缺少某些东西,或者是 logback 的问题(由初学者使用)而不是我的误解?

logging logback java.util.logging spring-boot

5
推荐指数
1
解决办法
3480
查看次数

如何检查 Java.util.logging 中启用的信息日志级别

如何在实际记录调试语句之前检查是否启用了某个日志记录级别?

java logging java.util.logging

5
推荐指数
1
解决办法
5518
查看次数

java.util.logger.setLevel() 和 handler.setLevel() 有什么区别?

我在项目中使用 java.util.Logger,并且使用简单的 ConsoleHandler。默认情况下,日志记录级别为“信息”。我想将级别更改为“精细”。但是,我必须更改记录器和处理程序的级别。为什么?这有什么必要呢?为什么要这样设计呢?为什么我不能单独在 Logger/Handler 上设置级别并完成它?

java logging java.util.logging

5
推荐指数
1
解决办法
1205
查看次数

属性的级别值错误,无法设置 java.util.logging.FileHandler 的级别

这是学校作业:我必须构建一个自定义记录器类,能够从项目中的任何位置进行记录。

除了java.util.logger之外,我不能使用其他任何东西。我正在使用位于项目中 /conf 文件夹中的属性文件。

我收到此错误:

属性的错误级别值:java.util.logging.FileHandler.level

无法设置 java.util.logging.FileHandler 的级别

我认为这就是为什么我的 debug() 方法无法在我的文件中打印“ddd”,也是为什么我不能使用我设置的这个字符串格式化文件:“[%1$tc] - [%2$s] [% 4$s] [%5$s] %n”。

我无法理解我在conf文件或代码中可能犯的错误:导入是正确的,我的代码没有错误/警告。

我知道我不应该使用绝对路径,但我不认为这是我的问题,解决此问题后路径将得到修复。

我的 /test 文件夹中的 try.log 的输出:

2018 年 1 月 3 日 14:01:03 logger.classLogger 警告

警告:请注意

请 03-Jan-2018 14:01:03 logger.classLogger 错误

严重:错误

2018 年 1 月 3 日 14:01:03 logger.classLogger 信息

信息:信息

这是我的 .properties 文件:

.level=ALL
handlers = java.util.logging.FileHandler 
java.util.logging.FileHandler.level = FINE 
java.util.logging.FileHandler.append = true 
java.util.logging.FileHandler.limit = 1000000 
java.util.logging.FileHandler.count = 100 
java.util.logging.FileHandler.pattern =  %t/Log%u%g.log
java.util.logging.SimpleFormatter.format = "[%1$tc] - [%2$s] [%4$s] …
Run Code Online (Sandbox Code Playgroud)

java logging properties java.util.logging

5
推荐指数
1
解决办法
6566
查看次数

如何完全禁用 JAudioTagger Logger

已经使用JAudioTagger库 2 年了,我不知道如何禁用它的 Logger。

还问了项目负责人:https : //bitbucket.org/ijabz/jaudiotagger/issues/257/how-to-disable-jaudio-tagger-logger

我试过什么?( 没运气 )

Logger.getLogger("org.jaudiotagger").setLevel(Level.OFF);
Logger.getLogger("org.jaudiotagger.tag").setLevel(Level.OFF);
Logger.getLogger("org.jaudiotagger.audio.mp3.MP3File").setLevel(Level.OFF);
Logger.getLogger("org.jaudiotagger.tag.id3.ID3v23Tag").setLevel(Level.OFF);
Run Code Online (Sandbox Code Playgroud)

现在我只是从应用程序中禁用了 Logger,但我需要它,我该怎么办?由于大量 JAudioTagger 消息,控制台几乎无法使用。

临时解决方案(虽然我需要应用程序的记录器......)

LogManager.getLogManager().reset();
Run Code Online (Sandbox Code Playgroud)

我已经搜索了所有网络,我找不到像 2 年那样的解决方案......这就是我在这里问的原因。


解决方案27/06/2018 对于有兴趣的人:)

static {

    //Disable loggers               
    pin = new Logger[]{ Logger.getLogger("org.jaudiotagger") };

    for (Logger l : pin)
        l.setLevel(Level.OFF);
}
Run Code Online (Sandbox Code Playgroud)

java logging java.util.logging jaudiotagger

5
推荐指数
1
解决办法
484
查看次数

在java日志格式化程序中使用简单的类名

我有一个 SimpleFormatter 用于使用字符串登录我的应用程序
"%1$tF %1$tT %4$-7s %2$s %5$s%6$s%n"

我想使用简单的类名而不是规范名称。是否有可以与 2$ 字段一起使用的格式选项?或者这是否需要编写一个新的处理程序?

例如,而不是
2019-02-06 07:09:09 INFO simplex.tools.SIMPLEXScheduler main Start

我倒要看看
2019-02-06 07:09:09 INFO SIMPLEXScheduler main Start

java formatter java.util.logging

5
推荐指数
1
解决办法
3245
查看次数

将java.util.logging与JDBC驱动程序一起用于HyperSQL数据库引擎

在搜索了我的问题的答案之后,在Java应用程序中实现登录在Swing应用程序中使用有关java.util.logging包的java.util.logging包,我已经找到了问题,并希望在此处分享我的解决方案。我将其发布为一个新问题,以(希望)对实际问题做一个简洁的陈述(在我先前的问题中并不完全清楚,因为我问的是错误的问题),并给出(希望)明确的答案。

以下代码说明了该问题:

package jdbcloggingsscce;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.FileHandler;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;

public class JDBCLoggingSSCCE {
    public static void main(String[] args) throws IOException, SQLException {
        JDBCLoggingSSCCE.initLogger();
        Logger logger = Logger.getLogger(JDBCLoggingSSCCE.class.getName());
        logger.log(Level.INFO, "Starting JDBCLoggingSSCCE");

        Connection conn = DriverManager.getConnection(DB_URL);
        logger.log(Level.INFO, "JDBC Connection created");
    }

    private static void initLogger() throws IOException {
        Handler handler = new FileHandler(JDBCLoggingSSCCE.LOG_FILE_NAME);
        handler.setFormatter(new SimpleFormatter());

        Logger logger = Logger.getLogger("");
        logger.setLevel(Level.ALL);
        logger.addHandler(handler);
    }
    private static final …
Run Code Online (Sandbox Code Playgroud)

java jdbc hsqldb java.util.logging

4
推荐指数
1
解决办法
1428
查看次数