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

如何在路由appender中每天滚动一个新的日志文件

管峻
2023-03-14

我的路由log4j2.xml应该基于用户登录的角色日志文件。

假设一个用户连续3天登录应用程序,做大约半个小时的事情,然后退出。因此,根据要求,应该为登录用户创建3个日志文件(每天一个文件在单独的文件中),例如。

john-20-11-2015.log, 
john-21-11-2015.log, 
john-22-11-2015.log

下面是Log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<Configuration status="WARN" name="MySite" monitorInterval="30">
    <Appenders>

        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout>
                <pattern>[%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%c{1}] - %msg%n</pattern>
            </PatternLayout>
        </Console>

        <RollingFile name="error-log" 
            fileName="D:/myLogs/error [${date:yyyy-MM-dd}].log" filePattern="D:/myLogs/error-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%c{1}] - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>

        <RollingFile name="trace-log" 
            fileName="D:/myLogs/trace [${date:yyyy-MM-dd}].log" filePattern="D:/myLogs/trace-%d{yyyy-MM-dd}.log">
            <PatternLayout>
                <pattern>[%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%c{1}] - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
        </RollingFile>

        <Routing name="RoutingAppender">
            <Routes pattern="$${ctx:logFileName}">
                <Route>
                    <RollingFile name="Rolling-${ctx:logFileName}" append="true"
                        fileName="D:/myLogs/${ctx:logFileName}~${date:yyyy-MM-dd}.log"
                        filePattern="D:/myLogs/%d{yyyy-MM-dd}-%i.log">
                        <PatternLayout
                            pattern="SERVER-LOG: [%-5level] [%d{yyyy-MM-dd HH:mm:ss.SSS}] [%logger{1}] - %msg%n" />
                        <Policies>
                            <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                        </Policies>
                    </RollingFile>
                </Route>
                <Route ref="Console" key="$${ctx:logFileName}" />
            </Routes>
        </Routing>

    </Appenders>

    <Loggers>
        <Root level="trace" additivity="false">
            <Appender-Ref ref="Console"/>
            <appender-ref ref="error-log" level="error"/>
            <appender-ref ref="trace-log" level="trace"/>
            <Appender-Ref ref="RoutingAppender" />
        </Root>
    </Loggers>
</Configuration>

我打电话来

ThreadContext.put("logFileName", userName);

要在路由appender中追加日志,日志在相应的日志中正确追加,我正在注销方法期间清除线程上下文

ThreadContext.remove("logFileName");
ThreadContext.clearAll();

我用tomcat托管了我的应用程序。日志文件是根据文件名模式根据每个用户的已登录用户生成的,但日志不是每天生成的,而是在前一天日志中附加用户的当天日志

john-20-11-2015.log包含21号和22号的日志

它的角色只有在tomcat停止启动时才是一个新的日志文件。

伙计们帮帮我。。有什么问题吗

共有2个答案

司马彬
2023-03-14

仅在创建追加器时才计算filename属性。它不会在每次滚动时更改。您应该在每次滚动时获得一个新文件,该文件中确实包含正确的日期。

这不是你看到的吗?

籍英叡
2023-03-14

我想你需要DailRollingFileAppender这里就是一个例子

也请看类似的问题

例子:

<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
    ...
    <param name="DatePattern" value="'.'yyyy-MM-dd" />
    ...
</appender>
 类似资料:
  • 使用Log4j2.8,有没有一种方法可以让我的日志每天旋转,但使当前文件具有恒定的名称? 示例: 我尝试了以下配置,但没有成功: 此外,当我在某一天首次启动应用程序时,我会遇到以下例外情况:

  • 我用的是log4j2.14。1. 我想做的是有一个appender,它允许我每天有一个日志文件,但在N天后删除旧的日志(例如,我希望最多有10天的日志)。 我尝试过使用DirectWriteRolloverStrategy,它看起来不错,每天创建一个日志文件,但显然无法删除旧文件,因此我的日志目录中充满了日志;maxFiles属性似乎只设置了与文件模式匹配的时间段内允许的最大文件数(请参见http

  • 我在研究这个问题时发现的几乎所有内容都是针对Log4J1.x的,并讨论了一个似乎在2.0中不存在的datePattern参数。 下面是我的log4j2.xml文件: 我正在将信息和以上内容写入日志文件,并将调试写入控制台(目前)。这些文件被写得很好,但它们似乎每天都在滚动(这似乎是默认的)。

  • 我目前正在使用log4j2为我的web应用程序编写日志。我已经配置了一个滚动文件追加器,可以在每晚午夜滚动。 我的log4j2.xml如下: 目前,这会写入名为application.log的日志,然后在午夜将当前的application.log文件复制到application yyy-MM-DD . log(文件名中的日期会被正确替换),并在第二天继续在application.log中记录日志。

  • 1)我想每天使用log4j2.xml.生成日志文件,我使用RollingFile appender标记来实现同样的功能。但是,它将日志附加在同一文件上。 2)下面是我们在log4j.xml中使用的类别标签,我想知道在log4j2.xml中类别标签的等价物是什么? 3) 如何使用log4j2中的所有属性定义snmptrappender?

  • 问题内容: 我想知道是否有人可以通过一些SQL帮助我,以便在两天或更长时间(让我们以7天为参考)期间返回登录到数据库表中的唯一身份用户的数量。 我的日志表在每行中都包含一个时间戳(ts)和user_id,代表当时该用户的活动。 以下查询从该日志返回每日活动用户或DAU: 现在,让我们说我想在此单个查询中添加(或至少以最有效的方式进行检索)每周活动用户或7天期间记录的唯一身份用户总数。但是,我不想将