如何默认将java记录器输出到文件

2022-09-01 14:20:37

Netbeans深思熟虑地洒了Logger.getLogger(this.getClass().getName()).log(Level.[...]语句放入捕获块中。现在我想将它们全部指向一个文件(和控制台)。

每个日志记录教程和这样的只有我告诉如何让特定的记录器输出到文件中,但我认为有比修复每个自动生成的日志记录语句更好的方法?为某种根记录器或其他内容设置处理程序?


答案 1

我只是在启动时添加以下内容

Handler handler = new FileHandler("test.log", LOG_SIZE, LOG_ROTATION_COUNT);
Logger.getLogger("").addHandler(handler);

您可以为 和 指定自己的值LOG_SIZELOG_ROTATION_COUNT

您可能需要调整日志记录级别以适应。


答案 2

您必须定义日志在记录器配置文件中的写入位置。例如,如果使用 log4j,则 log4j.xml(或 log4j.properties)文件将包含此类信息。

例如,下面是一个简单的 log4j.xml 文件,它直接登录到文件 (my-app.log) 和控制台中:

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

    <appender name="rolling" class="org.apache.log4j.DailyRollingFileAppender">
        <param name="File" value="my-app.log" />
        <param name="DatePattern" value=".yyyy-MM-dd" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{yyyy-MM-dd HH:mm:ss} %-5p [%C] [IP=%X{ipAddress}] [user=%X{user}] %m%n" />
        </layout>
    </appender>

    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern"
                value="%d{yyyy-MM-dd HH:mm:ss} %-5p [%C] [user=%X{user}] %m%n" />
        </layout>
    </appender>

    <root>
        <priority value="info" />
        <appender-ref ref="console" />
        <appender-ref ref="rolling" />
    </root>

</log4j:configuration>

推荐