java - 是否有可能加速 log4j 或 slf4j 输出(也可能全局关闭它们)?

标签 java logging netbeans log4j slf4j

我之前使用 System.out.println 在 Netbeans 中查看我的 java 控制台应用程序的输出。

该程序花了大约 10 分钟 运行并在运行时显示输出。

现在我用slf4j的记录器替换了所有的System.out.println的

private final Logger logger = LoggerFactory.getLogger(MyClass.class);    
logger.info("number of rows of x: " + numberOfx);

现在该程序需要 28 分钟来运行并显示输出(未进行其他更改)。

我没有在 pom 文件或其他地方做任何额外的配置。我刚刚将 slf4j-api:1.7.1slf4j-simple:1.7.18 的本地 jar 添加到 Netbeans 项目中并添加了导入

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

因为我只做了这么多,并且因为输出以红色显示在 Netbeans 控制台上,所以我假设输出没有写入磁盘。

如果是,两个问题:
1. 是否已知 log4jslf4j 输出比 System.out.println 慢?
2. 有什么办法可以加快输出速度吗? (也许是因为一些可以禁用的内部检查,所以速度很慢?)
3. 我需要我的程序运行得快。有没有办法全局关闭日志记录,而不是转到每个文件并注释掉 logger.info() 语句?

最佳答案

要点: 1.引用Do not use System.out.println in server side code 明确提到 I/O 操作较慢。

2 和 3. 您应该使用下面提到的 logback.xml 来配置您的日志记录,以便您可以根据优先级/要求启用/禁用日志记录。在此示例中,DEBUG 被禁用,类似地,您也可以禁用 INFO,这将适用于您的情况。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <charset>UTF-8</charset>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-6level%logger{0} [%X{api_id}-%X{org}-%X{user}-%X{client_req_id}]- %msg%n</pattern>
    </encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">      
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
         <charset>UTF-8</charset>
        <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-6level%logger{0} [%X{api_id}-%X{org}-%X{user}-%X{client_req_id}]- %msg%n</Pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <FileNamePattern>${user.home}/logs/%d{yyyy_MM_dd}_server.log</FileNamePattern>
    </rollingPolicy>
</appender>

<logger name="org." level="DEBUG" additivity="false">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="FILE" />
</logger>

<root level="ERROR">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="FILE" />
</root>

关于java - 是否有可能加速 log4j 或 slf4j 输出(也可能全局关闭它们)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35764456/

相关文章:

NetBeans,html5 项目。站点根文件夹和源文件夹有什么区别?

node.js - 有什么方法可以使用 exe 文件执行我的 Node js 和 puppeteer 程序吗?

java - 如何从 Netbeans Web 项目在 Java ME SDK (Mac) 模拟器中运行 JAD/JAR

java - 使 Gridpane 对象填满屏幕

java - 在将输入字符串解析为 double 时保留其格式

java - 设置 JTable、Java 的条件

vba - 如何使用 VBA 在文本文件中的句子(用破折号)下划线

node.js - 在 Express.js 中使用 TraceId 进行日志记录

java - 具有基本身份验证的 HTTP 请求

python - 找不到记录器 "deluge"的处理程序