标签: log4j2

使用Log4j2记录Spring

我正在尝试使用Log4j2将spring日志打印到文件和控制台中.我想这是我的Log4j2配置中的一个问题.我无法让它发挥作用.我在log4j2.xml文件中有这个配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration name="defaultConfiguration" status="warn" strict="true" monitorInterval="5">
    <properties>
        <property name="patternlayout">%d{ISO8601} [%t] %-5level %logger{36} - %msg%n%throwable{full}</property>
        <property name="filename">${env:MY_ROOT}/logs/mylog.log</property>
        <property name="filenamePattern">${env:MY_ROOT}/logs/mylog-%d{yyyy-dd-MM}-%i.log.gz</property>
    </properties>
    <appenders>
        <appender name="Console" type="Console" target="SYSTEM_OUT">
            <layout type="PatternLayout" pattern="${patternlayout}" />
        </appender>
        <appender name="File" type="RollingFile" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true"
        append="true">
            <layout type="PatternLayout" pattern="${patternlayout}" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="50 MB" />
            </Policies>
            <DefaultRolloverStrategy max="30" />
        </appender>
        <appender name="AsynchFile" type="asynch" blocking="true" bufferSize="128">
            <appender-ref ref="File" />
        </appender>
    </appenders>
    <loggers>
        <root level="info">
            <appender-ref ref="Console" />
            <appender-ref ref="AsynchFile" />
        </root>
        <logger name="org.springframework.beans"> …
Run Code Online (Sandbox Code Playgroud)

java logging spring log4j log4j2

19
推荐指数
2
解决办法
2万
查看次数

如何为log4j2定义全局PatternLayout?

是否可以PatternLayoutlog4j2.xml配置文件中定义(命名)?

<?xml version="1.0" encoding="UTF-8"?>
  <configuration status="ERROR">
    <appenders>
      <Console name="CONSOLE" target="SYSTEM_OUT">
        <PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" />
      </Console>

      <File name="DEBUG_FILE" fileName="debug.txt">
        <PatternLayout pattern="%d %-5p %C{2} (%F:%L) - %m%n" />
      </File>
    </appenders>

    <loggers>
      <root level="trace">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="DEBUG_FILE" />
      </root>
    </loggers> 

</configuration>
Run Code Online (Sandbox Code Playgroud)

在这个例子PatternLayout中重复.我可以用名称以某种方式全局定义它,然后只使用名称引用来设置每个appender的模式吗?

java logging log4j2

19
推荐指数
2
解决办法
2447
查看次数

log4j2与Java 11兼容吗?

我尝试在最新的Java 11上运行我的项目.一切正常,除了特定的文件记录器.日志在以前的Java版本(10,9,8)上运行良好,但在Java 11上则不行.

在服务器运行期间,我只看到1个警告:

警告:不支持sun.reflect.Reflection.getCallerClass.这会影响性能.

这是我的配置:

<Configuration>

    <Appenders>

        <RollingFile name="postgresDBLog" fileName="${sys:logs.folder}/postgres.log"
              filePattern="${sys:logs.folder}/archive/postgres.log.%d{yyyy-MM-dd}">
            <PatternLayout>
                <pattern>%d{HH:mm:ss.SSS} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

        <RollingFile name="workersLog" fileName="${sys:logs.folder}/worker.log"
                     filePattern="${sys:logs.folder}/archive/worker.log.%d{yyyy-MM-dd}">
            <PatternLayout>
                <pattern>%d{HH:mm:ss.SSS} - %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

        <RollingFile name="statsLog" fileName="${sys:logs.folder}/stats.log"
                     filePattern="${sys:logs.folder}/archive/stats.log.%d{yyyy-MM-dd}">
            <PatternLayout>
                <pattern>%msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

        <RollingFile name="userLog" fileName="${sys:logs.folder}/blynk.log"
                     filePattern="${sys:logs.folder}/archive/blynk.log.%d{yyyy-MM-dd}">
            <PatternLayout>
                <pattern>%d{HH:mm:ss.SSS} %-5level- %msg%n</pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>

    </Appenders>

    <Loggers>

        <Logger name="cc.blynk.server.workers" level="debug" additivity="false">
            <appender-ref ref="workersLog"/>
        </Logger>
        <Logger name="cc.blynk.server.workers.StatsWorker" level="debug" additivity="false">
            <appender-ref ref="statsLog"/>
        </Logger>
        <Logger name="cc.blynk.server.db" level="debug" additivity="false">
            <appender-ref ref="postgresDBLog"/> …
Run Code Online (Sandbox Code Playgroud)

java log4j2 java-11

19
推荐指数
5
解决办法
6265
查看次数

log4j2 - 限制日志文件的数量

我有以下log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
  <appenders>
    <RollingFile name="testLog" fileName="test.log" filePattern="" append="false">
      <PatternLayout pattern="[%t] %-5level - %msg%n%n"/>
    <SizeBasedTriggeringPolicy size="5mb" />
    </RollingFile>
  </appenders>
  <loggers>
    <logger name="TestsLogger" level="trace" additivity="false">
      <appender-ref ref="testLog"/>
    </logger>
    <root level="debug">
      <appender-ref ref="testLog"/>
    </root>
  </loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)

如何修改此配置

  1. 在达到5mb限制后,不会一遍又一遍地覆盖相同的日志文件,而是创建一个新文件.有一些像test1.log,test2.log等的东西会很好.
  2. 如何限制在1中创建的部分日志文件的数量?我想要实现的是如下方案:

    creating test1.log [present log files: test1.log]
    test1.log - 5mb limit reached
    creating test2.log [present log files: test1.log, test2.log]
    test2.log - 5mb limit reached
    creating test3.log [present log files: test2.log, test3.log]
    test3.log - 5mb limit reached
    creating test4.log [present log files: …
    Run Code Online (Sandbox Code Playgroud)

xml configuration logging log4j log4j2

18
推荐指数
1
解决办法
2万
查看次数

如何在运行时使用log4j2 api将loglevel从INFO设置为ERROR?

log4中没有logger.setLevel()方法.那么如何在运行时设置日志级别.

java log4j2

18
推荐指数
4
解决办法
1万
查看次数

在log4j 1.2到log4j 2的迁移中,如何处理DailyRollingFileAppender类?

我正在努力将Java项目从使用log4j 1.2迁移到使用log4j 2.

log4j 1.x有一个org.apache.log4j.DailyRollingFileAppender在我的项目的log4j.properties配置文件中提到的类.DailyRollingFileAppenderlog4j 2中不再存在具有相同名称的类 .我想知道是否DailyRollingFileAppender可以用log4j 2中的其他类或某些替换配置或实现替换该角色.

迁移指南强调应用程序不能访问log4j 1.x内部的方法和类,例如Appenders,因为它可以迁移到log4j 2.但是为了进行迁移,可以做些DailyRollingFileAppender什么呢?是否可以通过某些自定义配置或log4j 2中的类组合替换它?迁移指南中一些配置示例,特别是一个配置示例FileAppender,但是怎么样DailyRollingFileAppender?这是一个非常接近基本的东西FileAppender:

来自log4j 1.2 API Javadoc,类org.apache.log4j.DailyRollingFileAppender

DailyRollingFileAppender扩展FileAppender,以便以用户选择的频率滚动基础文件.据观察,DailyRollingFileAppender会出现同步问题和数据丢失.log4j extras随附包括应考虑用于新部署的备选方案,并在org.apache.log4j.rolling.RollingFileAppender的文档中进行了讨论.

java apache logging log4j log4j2

18
推荐指数
1
解决办法
8745
查看次数

Log4J2 - 如何在单元测试中禁用日志记录?

我在我的应用程序中使用Log4J v2.0 Beta3进行日志记录,并且在运行单元测试时生成了日志消息.我检查了API以某种方式将日志级别设置为CRITICAL,但我找不到任何方法来更改记录器配置.

事实上,我在log4j2网站上看到了这个:

请注意,与Log4j 1.x不同,公共Log4j 2 API不会公开添加,修改或删除appender和过滤器或以任何方式操作配置的方法.

所以说.在单元测试中禁用日志记录的正确方法是什么?

java logging unit-testing log4j2

17
推荐指数
2
解决办法
6228
查看次数

log4j2中基于时间的触发策略

我试图每小时创建新的日志文件.我在RollingFileAppender中使用lo4j2的TimeBasedTriggerringPolicy.下面是我从log4j2官方网站上获取的示例xml配置代码.

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">
   <Appenders>
      <RollingFile name="RollingFile" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log.gz">
         <PatternLayout>
            <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
         </PatternLayout>
         <Policies>
            **
            <TimeBasedTriggeringPolicy interval="1" modulate="true" />
            **
            <SizeBasedTriggeringPolicy size="250 MB" />
         </Policies>
      </RollingFile>
   </Appenders>
   <Loggers>
      <Root level="error">
         <AppenderRef ref="RollingFile" />
      </Root>
   </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

在interval属性中,我设置了1表示1小时.但我的文件仍然不会每1小时滚动一次.

请帮我发现任何错误.

注意:我已经包含了log4j2的beta9(这是最新的)

java configuration logging log4j log4j2

17
推荐指数
5
解决办法
4万
查看次数

方法getLogger()不再是log4j2中Logger的成员?

我有log4j-api-2.0.0.jarlog4j-core-2.0.2.jar导入到我的构建路径中.但不知何故,以下代码失败了:

import org.apache.logging.log4j.core.Logger;

public class TheClass {

    private static Logger log = Logger.getLogger(TheClass.class);

...
Run Code Online (Sandbox Code Playgroud)

并且错误消息显示:

The method getLogger(Class<TheClass>) is undefined for the type Logger

我只是好奇getLogger()不再是Logger中的有效方法?

java logging log4j log4j2

17
推荐指数
4
解决办法
3万
查看次数

如果我们将它与slf4j api一起使用,我们可以使用log4j2的所有功能吗?

我们已经迁移了所有代码以使用slf4 API来使用通用API,但是现在我们正在考虑从log4j 1.x升级到log4j 2.x. 如果我们使用slf4j API和log4j2作为实现,我们是否能够使用log4j2的所有功能?

java logging log4j slf4j log4j2

17
推荐指数
1
解决办法
6249
查看次数

标签 统计

log4j2 ×10

java ×9

logging ×8

log4j ×6

configuration ×2

apache ×1

java-11 ×1

slf4j ×1

spring ×1

unit-testing ×1

xml ×1