这有点奇怪,但我对日志记录包及其属性的使用很陌生。我通过谷歌搜索可以找到的所有问题都是“如何使日志记录打开多个文件?” 但我今天的问题是如何让它停止同时处理多个文件。开始了...
首先,这个项目仅限于使用 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) 我的 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) 我想在一个tomcat下有2个web应用程序,这2个项目应该有自己的logging.properties。我知道如果您将logging.properties放入war文件中,这是可能的,但我想指定一个自定义loggin.properties文件(在我部署的war中)。那可能吗?
根据 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 的问题(由初学者使用)而不是我的误解?
如何在实际记录调试语句之前检查是否启用了某个日志记录级别?
我在项目中使用 java.util.Logger,并且使用简单的 ConsoleHandler。默认情况下,日志记录级别为“信息”。我想将级别更改为“精细”。但是,我必须更改记录器和处理程序的级别。为什么?这有什么必要呢?为什么要这样设计呢?为什么我不能单独在 Logger/Handler 上设置级别并完成它?
这是学校作业:我必须构建一个自定义记录器类,能够从项目中的任何位置进行记录。
除了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) 已经使用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) 我有一个 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应用程序中实现登录并在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 ×7
logging ×7
logback ×2
tomcat ×2
formatter ×1
hsqldb ×1
jaudiotagger ×1
jdbc ×1
properties ×1
slf4j ×1
spring-boot ×1