当前位置: 首页 > 知识库问答 >
问题:

如何配置log4j以启用/禁用对文件的日志记录?

薄兴昌
2023-03-14

我现在的问题是,如果我想完全禁用FileAppender,我不知道怎么做。如果我向FileAppender添加一个DenyAllFilter,它将阻止任何内容写入文件,但文件仍然被创建。如果从根记录器中删除FileAppender,则将Log4J写入stderr:

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

如果我将根级别设置为OFF,则我将自定义调试级别设置为仍然输出的各个记录器。

如果我将LoggerRepository级别设置为OFF,那么所有的记录器(那些我想转到STDOUT和文件中的记录器)都将关闭。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} %-5p %c{5} - %X{messageId} - %m%n" />
<!--            <param name="ConversionPattern" value="%m%n" /> -->
        </layout>
    </appender>

    <appender name="LOGTXT" class="org.apache.log4j.FileAppender">
        <param name="file" value="lss-client.log" />
        <param name="append" value="false" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ISO8601} %-5p %c{5} - %X{messageId} - %m%n" />
        </layout>
<!--        <filter class="org.apache.log4j.varia.DenyAllFilter"/> -->
    </appender>

    <!-- Spring Loggers -->
    <logger name="org.springframework">
        <level value="INFO" />
    </logger>

    <logger name="org.springframework.ws.client.MessageTracing.sent">
        <level value="TRACE" />
    </logger>   

    <logger name="org.springframework.ws.client.MessageTracing.received">
        <level value="TRACE" />
    </logger>   

    <logger name="com.cws.cs.Client" >
        <level value="INFO" />
        <appender-ref ref="STDOUT" />
    </logger>

    <root>
        <level value="INFO" />
        <appender-ref ref="LOGTXT" /> 
    </root>
</log4j:configuration>

埃里克

共有1个答案

楮阳
2023-03-14

可以肯定的是,当您配置fileappender时,slf4j/log4j会立即创建日志文件。

我认为您在这里的最佳选择是拥有2个不同的完整的Log4J配置,并根据命令行参数选择在启动时加载哪一个。

在伪代码中:

public static void main(String[] args){
    //if log to file arg = true
        DOMConfigurator.configure("logToFile.log4j.xml");
    //else
        DOMConfigurator.configure("logToConsoleOnly.log4j.xml");
}
public static void main(String[] args){

    DOMConfigurator.configure("log4j.xml");
    //if log to file arg = true{
        // Define layout
        PatternLayout layout = new PatternLayout();
        layout.setConversionPattern("%d{ISO8601} %-5p %c{5} - %X{messageId} - %m%n");

        // Create appender
        FileAppender appender = new FileAppender();
        appender.setFile("lss-client.log");
        appender.setLayout(layout);
        appender.activateOptions();

        // Get root logger and add appender.
        log = Logger.getRootLogger();
        log.setLevel(Level.INFO);
        log.addAppender(appender);
    }
} 
 类似资料:
  • 问题内容: 我还找不到关于如何使用Log4j的XML样式配置文件配置Hibernate日志记录的任何文档。 这是否有可能,或者我是否使用属性样式配置文件来控制Hibernate的日志记录? 如果有人有任何信息或文档链接,我们将不胜感激。 编辑: 只是为了澄清,我正在寻找控制Hibernate的实际XML语法的示例。 EDIT2: 这是我的XML配置文件中的内容。 日志记录工作正常,但是我正在寻找一

  • 我下载了kafka-clients-0.9.0.0。jar与maven一起使用,我希望我会看到类似于Kafka日志链接中的日志记录 然而,我不知道为什么我没有得到任何日志记录,即使我设置了引导。purpuse上的服务器错误,但它只是在没有发出任何警告的情况下被卡住了。我添加了几行代码以使用log4j打印到一个文件中,这似乎是可行的,但不知道为什么Kafka不能将事件记录到log4j中。 请注意,s

  • 我刚刚在EC2 Ubuntu 14.04 LTS上安装了我的第一个uWSGI服务器,使用以下配置:

  • 问题内容: 我有一些使用该软件包的工具化代码。现在该关闭日志记录了,我无法确定如何关闭标准记录器。 我错过了什么吗?我应该在进行日志调用之前检查标志,还是在生产中将其注释掉? 问题答案: 要完全禁用日志,最好调用Joril并将输出设置为无操作(例如) 但即使在此之后,操作仍将闲置约500-600 ns / op 1 这仍然可切断短路(左右 为100 ns / OP )通过使用自定义的实现,并实现所

  • 我正在为日志创建一个Spring Bootjar。我在我的主要spring boot项目中添加了这个依赖项。我可以在主项目的控制台中获取日志。但是没有登录到文件中。 我在文件中添加了以下application.yml 谁能帮我一下吗。提前谢谢!

  • 问题内容: 我不知道如何配置我的log4j,以便我的debugLog和reportLog彼此分开(不是附加的)。为什么在以下配置中,reportsLog始终为空? 这是我的Java代码: 问题答案: 尝试以下配置: 然后相应地用Java代码配置记录器: 你要输出到吗?如果不是,请将第一行更改为: 并摆脱界限。