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

只更改记录器中的日志翻转策略

殷永嘉
2023-03-14
<FileName>file.log</FileName>
<FilePattern>../archive/log-%d{yyyy-MM-dd}.log</FilePattern>

与logger2关联的Rollingfile追加器:

<FileName>file.log</FileName>
<FilePattern>../archive/log-%d{yyyy-MM-dd-HH}.log</FilePattern>

当服务器运行时,如何根据代码中的切换将日志文件的滚动策略从每天改为每小时?(可以是1个记录器/2个记录器,但翻转应该从每天改为每小时)

共有1个答案

池恩
2023-03-14

我不太确定你想要的输出是多少,但我想这可能很接近。请注意,我将提供一个在每毫秒和每秒滚动日志之间切换的示例,但您可以根据需要进行修改。

下面是一个生成日志的示例类。它将上下文键设置为“millis”,这样log4j2将选择一个每毫秒滚动日志的appender,生成一些日志,等待几秒钟,然后将上下文键设置为“sec”,以选择一个每秒滚动日志的appender,然后生成更多的日志。

package example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.ThreadContext;


public class SomeClass {
    private static final Logger log = LogManager.getLogger();

    public static void main(String[] args){
        ThreadContext.put("rollTime", "millis");

        log.debug("This is some debug!");
        log.info("Here's some info!");
        log.error("Some error happened!");

        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        ThreadContext.put("rollTime", "sec");
        log.debug("This is some debug!");
        log.info("Here's some info!");
        log.error("Some error happened!");
    }
}

下面是log4j2配置文件(XML格式):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <Routing name="MyRoutingAppender">
            <Routes pattern="$${ctx:rollTime}">
                <Route key="millis">
                    <RollingFile name="fileAppender1" fileName="logs/file.log"
                        filePattern="logs/file.%d{yyyy-MM-dd HH_mm_ss_SSS}.log">
                        <PatternLayout
                            pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger:%L - %msg%n" />
                        <Policies>
                            <TimeBasedTriggeringPolicy />
                        </Policies>
                        <DefaultRolloverStrategy max="2" />
                    </RollingFile>
                </Route>
                <Route key="sec">
                    <RollingFile name="fileAppender2" fileName="logs/file.log"
                        filePattern="logs/file.%d{yyyy-MM-dd HH_mm_ss}.log">
                        <PatternLayout
                            pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger:%L - %msg%n" />
                        <Policies>
                            <TimeBasedTriggeringPolicy />
                        </Policies>
                        <DefaultRolloverStrategy max="2" />
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>
    </Appenders>

    <Loggers>
        <Root level="trace">
            <AppenderRef ref="Console" />
            <AppenderRef ref="MyRoutingAppender" />
        </Root>
    </Loggers>
</Configuration>
 类似资料:
  • 我目前正在尝试降低我在java项目中使用的PDFBox 1.8.6库的日志记录级别,但失败了。基于前面的问题,我在 /src/目录中有以下log4j.properties文件。 我不确定我还遗漏了什么,因为我仍然在控制台中收到类似以下消息的垃圾邮件。 如果有一种方法可以通过编程方式更改日志级别,那么我根本不会附加到属性文件,因为我在其他任何地方都不使用log4j。我不知道它是否使用log4j。属性

  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

  • 我有一个用例,在这个用例中,我运行了数千个SQL查询和日志记录集,按照现在的情况,将每个查询写到控制台需要花费大量时间,并且会使客户端的调用超时。我试着将pom.xml中dev概要文件的logback.loglevel属性设置为ERROR,但是没有用。 所以我的问题是: < li >是否可以为单独的REST调用配置日志级别? < li >如何全局配置应用程序的日志级别?

  • 以下是发生这种情况的日志: 如果我在文件名中添加参数,那么我的新文件将不会被删除,但是翻转过程仍然会在初始的翻转过程完成后每秒触发一次,并且我会为发送到记录器的每个日志事件生成一个新文件。 编辑:我只是使用XML配置文件而不是上面的编程方法进行了尝试,得到了类似的结果。下面是我使用的配置文件: > 第一个是在初始事件之后每秒翻转一次,每个日志事件都有一个新文件 第二个是我上面描述的,在我的翻转文件

  • 有办法记录活动的mq Artemis转移吗?这样您就可以看到哪个转移应用于给定的消息?我在文件里好像找不到这个。

  • 问题内容: 我正在考虑将Redis用于Web应用程序日志记录目的。我用谷歌搜索,有人将日志转储到Redis队列/列表中,然后将计划的工作人员转储到磁盘中。 http://nosql.mypopescu.com/post/8652869828/another-redis-use-case- centralized-logging 我希望寻求理解,为什么不直接使用Redis持久化到磁盘?如果我分配了一