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

log4j2 RollingFile Appender需要日期模式

吴镜
2023-03-14

我在log4j2中定义了一个RollingFile追加器

<RollingFile name="Locserver" append="true" fileName="locserver.log" filePattern="locserver-%i.log">
    <PatternLayout>
        <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
    </PatternLayout>
    <Policies>
        <SizeBasedTriggeringPolicy size="50 MB"></SizeBasedTriggeringPolicy>
                <DefaultRolloverStrategy>10</DefaultRolloverStrategy>
    </Policies>
</RollingFile>

但是,当我尝试运行此命令时,我得到一个错误

IllegalStateException:模式在组织中不包含日期。阿帕奇。登录中。log4j。果心阿佩德。滚动的。图形处理器。getNExtTime(PatternProcessor.java:91)

当我在filePattern中放入日期模式时,这种情况就消失了,例如,locserver-%d{MM-dd-yyyy}-%i.log。但是我不希望日志名称中的日期。我的配置是错误还是有问题?

共有3个答案

曾高杰
2023-03-14

对我来说,这就像这里描述的一样(使用log4j2.0-beta9)

我的log4j。xml(大小策略设置为1kB,仅用于测试):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </Console>
    <RollingFile name="Logfile"
                 fileName="Log/App.log"
                 filePattern="Log/App-%i.log">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
      <Policies>
        <SizeBasedTriggeringPolicy size="1 KB"/>
      </Policies>
      <DefaultRolloverStrategy max="4"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="STDOUT"/>
      <AppenderRef ref="Logfile"/>
    </Root>
  </Loggers>
</Configuration>

它也可以在使用配置片段时工作(我刚刚更正了DefaultRolloverStrategy设置):

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
  <Appenders>
    <Console name="STDOUT" target="SYSTEM_OUT">
      <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
    </Console>
    <RollingFile name="Locserver"
                 append="true"
                 fileName="locserver.log"
                 filePattern="locserver-%i.log">
      <PatternLayout>
          <pattern>%d{ISO8601} [%t] %p %c %L - %m%n</pattern>
      </PatternLayout>
      <Policies>
          <SizeBasedTriggeringPolicy size="50 MB"></SizeBasedTriggeringPolicy>
      </Policies>
      <DefaultRolloverStrategy max="4"/>
    </RollingFile>
  </Appenders>
  <Loggers>
    <Logger name="eeo.tts" level="debug"/>
    <Root level="info">
      <AppenderRef ref="STDOUT"/>
      <AppenderRef ref="Locserver"/>
    </Root>
  </Loggers>
</Configuration>

您使用的是哪个版本的log4j2?

孔梓
2023-03-14

在RollingFile appender中,TimeBasedTrigerring策略检查标签的filepattern属性中的datepattern。然后,使用TimeBasedTrigerring策略时,必须指定日期标签。

放置%d{…} 文件模式中包含SimpleDate模式,例如:

<Appenders>
    <RollingFile name="RollingFile" fileName="logs/rpi_gpio_latest.log"
                 filePattern="logs/**%d{yyyy-MM-dd_HH}**_rpi_gpio_%i.log">
        <PatternLayout>
            <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy />
            <SizeBasedTriggeringPolicy size="4 MB"/>
        </Policies>
        <DefaultRolloverStrategy fileIndex="max"/>
    </RollingFile>
</Appenders>

仇睿
2023-03-14

谢谢你,乔。我终于明白了。

我的策略列表中有一个空的TimeBasedTriggeringPolicy标记,它强制在filePattern中进行日期检查。一旦我把它取下来,它就开始正常工作了。

 类似资料:
  • 我正在尝试将字符串转换为时间戳,但收到日期模式的解析错误。 线程“main”中出现异常Java . time . format . datetimeparseexception:无法在索引13处解析文本“22/10/18 - 3:05pm”

  • 问题内容: 我希望得到一些帮助,以帮助我编写一些自己编写的SQL语句。 我有一张数据表: 我需要获得以下信息: 换句话说,按日期划分日期范围。在SQL中甚至可能吗? 我的数据库是Oracle 11G R2,由于某些情况,我担心不能使用PL / SQL。 问题答案: 可以在SQL中执行此操作。有两个技巧。首先是生成一系列数字,您可以使用进行CTE处理。 第二个是将正确的逻辑放在一起以扩展日期,同时保

  • 默认情况下,Eloquent会将创建的和更新的列转换为Carbon实例。检索$dates属性中列出的属性时,它们将自动转换为Carbon实例,允许您对属性使用Carbon的任何方法。 我有以下日期属性-我还没有包括created_at和updated_at列,因为这些是按照上面的默认转换: 然后,我在模型上有以下访问器: 但是,上述操作会引发以下错误: 如果我将该方法更改为以下方法,它将起作用:

  • 问题内容: 需要格式为yyyy-mm的日期,并且应该分组以获取计数,但是当我给 我找到了这个解决方案 任何人都可以通过提供其他解决方案来帮助我 问题答案: 我认为最简单的方法如下: 但是,我从来都不喜欢在应用程序层之前将日期转换为字符串,所以如果是我,我会将其保留为日期格式,但是使用以下命令将每个日期转换为每月的第一天: 这意味着您的应用程序将列作为日期接收,并且可以将其作为日期进行操作,按日期进

  • 我需要的日期只有yyyy-mm-dd格式,因为DB2表有10精度的日期列。

  • 问题内容: 我正在尝试向表中添加约束,以使其将列之一显示为当前日期加上10天。到目前为止,这是我尝试过的内容(我对SQL还是很陌生): ! 编辑:我现在也尝试过此操作: 编辑:感谢ypercube和我的同学。最终的代码是: 问题答案: SQL-Server中用于将值添加到现有列的语法为: 经过 SQL-Fiddle 测试