标签: log4j2

Log4j2 DefaultRolloverStrategy的max属性如何真正起作用?

RollingRandomAccessFileAppender只配置了一个OnStartupTriggeringPolicyset,但是当我将max属性设置DefaultRolloverStrategy为某个数字时,日志会无限期地生成超过该数量.

这是我的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>
        <RollingRandomAccessFile 
            name="RollingRAF" 
            fileName="logs/app.log"
            filePattern="logs/app-%d{dd-MMM-yyyy@HH.mm.ss}.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} %m%n</Pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="5"/>
        </RollingRandomAccessFile>
    </Appenders>
    <Loggers>
        <Logger name="myLogger" level="warn">
            <AppenderRef ref="RollingRAF"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

是因为我的名字模式中没有迭代器吗?

是因为我的文件名精度设置为秒?

是因为我只有OnStartupTriggeringPolicy这套?

或者这里发生了什么?

我的目标是设置滚动配置,记录最近5次应用程序运行.

java configuration logging rollingfileappender log4j2

26
推荐指数
1
解决办法
3万
查看次数

什么是YAML中的log4j2示例默认配置文件?

所述文档为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>
  </Appenders>
  <Loggers>
    <Root level="error">
      <AppenderRef ref="Console"/>
    </Root>
  </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

等效文件看起来像(有效)YAML?

yaml log4j2

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

引起:org.apache.logging.log4j.LoggingException:log4j-slf4j-impl 不能与 log4j-to-slf4j 一起出现

在我的Spring Boot 2项目中:

build.gradle

dependencies {
    implementation 'com.google.code.gson:gson:2.7'
    implementation 'com.h2database:h2'
    implementation 'javax.servlet:jstl:1.2'
    implementation 'org.springframework.boot:spring-boot-devtools'
    implementation('org.springframework.boot:spring-boot-starter') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-log4j2'
    implementation 'org.springframework.boot:spring-boot-starter-jdbc'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation "org.springframework.boot:spring-boot-starter-web"

    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }

    testImplementation 'org.junit.jupiter:junit-jupiter:5.5.2'
}
Run Code Online (Sandbox Code Playgroud)

src/resources/log4j2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="Console"
              class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <!-- l, L, M - is extremely slow. It's use …
Run Code Online (Sandbox Code Playgroud)

java spring log4j2 spring-boot

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

Log4j 2不再支持log4j.properties文件了吗?

我正在使用log4j 2.0-rc1和log4j.propertiesfile 运行一个示例,但是log4j lib总是使用默认配置(日志级别,appender等)运行它.我也尝试过更改名称log4j2.properties,但没有任何反应.

java log4j log4j2

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

混合log4j 1.x和log4j 2

我有一个使用log4j2编写的新应用程序,以利用它的一些新功能.它使用的其中一个库有点旧,用log4j 1.x构建.我遇到一个问题,即应用程序中的新代码写入日志,但旧库中的代码不会写入日志.我甚至有一个类是旧库中某个东西的子类,也是旧库中的代码调用,这个代码也不会写入日志.我已将应用程序配置为使用log4j2版本2.0.2,并且在将旧库引用为maven依赖项时明确排除了log4j.

如何让旧库中的代码登录到与我的新代码相同的文件中?

重写旧库应该被认为是最后的选择

java logging log4j log4j2

24
推荐指数
1
解决办法
9100
查看次数

使用单个log4j2 xml文件配置log4j2和log4j

我已将我的应用程序迁移到log4j 2,并且我已通过log4j2.xml进行了配置

但是,我使用的一些库依赖于log4j 1.如果我使用以下命令运行应用程序:

-Dlog4j.configurationFile=path/to/log4j2.xml
Run Code Online (Sandbox Code Playgroud)

log4j 1抱怨找不到配置文件.我正在使用log4j 2,log4j-1.2-api-2.0-rc1.jar提供的log4j 1.x桥.是否可以使用单个log4j2.xml进行配置?

我尝试过的另一种方法是将log4j和log4j2配置在一起:

-Dlog4j.configurationFile=path/to/log4j2.xml -Dlog4j.configuration=path/to/log4j.xml
Run Code Online (Sandbox Code Playgroud)

我担心的是我的日志配置文件和输出的碎片.我也担心log4j.xml和log4j2.xml之间可能存在冲突.例如,logfile error.log配置为使用log4j 1中的FileAppender和log4j 2中的RollingFileAppender.

有什么建议?

[注意]

这是我看到的错误:

log4j:WARN No appenders could be found for logger (org.apache.activemq.util.ThreadPoolUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Run Code Online (Sandbox Code Playgroud)

我正在使用的log4j 2的版本是log4j 2.0 rc1.

[回答]

似乎activemq-5.8.0.jar与log4j 1捆绑在一起.解决方案只是在activemq之前加载log4j 1.x桥.

java logging log4j log4j2

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

将log4j2与slf4j一起使用

所以我尝试在他们的网站上遵循这个(非maven实现)和要求,将slf4j添加到log4j.并尝试使用此代码

public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(Main.class);
        logger.info("test");
    }
Run Code Online (Sandbox Code Playgroud)

并将以下内容添加到我的库中

  • log4j的-API-2.3.jar
  • log4j的核心-2.3.jar
  • log4j的-sl4j-IMPL-2.3.jar
  • log4j的到sl4j-2.3.jar
  • SLF4J-API 1.7.12.jar

当我尝试运行它时,我收到以下错误

Exception in thread "main" java.lang.StackOverflowError
    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:936)
    at java.util.concurrent.ConcurrentHashMap.containsKey(ConcurrentHashMap.java:964)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:40)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:284)
    at org.apache.logging.slf4j.SLF4JLoggerContext.getLogger(SLF4JLoggerContext.java:41)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:37)
    at org.apache.logging.slf4j.Log4jLoggerFactory.newLogger(Log4jLoggerFactory.java:29)
    at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:47)
    at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:284)...
Run Code Online (Sandbox Code Playgroud)

知道我哪里错了吗?

java slf4j log4j2

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

Log4j2中Asynclogger和AsyncAppender之间的区别

我知道AsyncAppender在一个单独的线程中执行附加作业.他们为此目的使用ArrayBlockingQueue.

AsyncLogger使用LMAX disruptor库将日志记录事件从一个应用程序线程移动到另一个线程,并且它与AsyncAppender一起更快.

我的问题是为什么我们在log4j2中有AsyncAppender,如果它所做的工作是由AsyncLogger更有效地实现的.

如果我们将AsyncAppender与AsyncLogger一起使用怎么办?AsyncLogger和AsyncAppender之间是否还有其他差异?

java logging multithreading log4j log4j2

22
推荐指数
2
解决办法
6499
查看次数

如何以编程方式配置log4j 2.x?

如何log4j 2.3console appender编程方式配置纯(没有任何格式的配置文件)?

基本上我正在寻找这个1.x代码的 2.x版本.

在我的课程中,我会使用

private static final Logger logger = LogManager.getLogger();
// 
    // some method
       logger.debug(someString);
Run Code Online (Sandbox Code Playgroud)

没有任何配置,我(正如预期)面对

错误StatusLogger找不到log4j2配置文件.使用默认配置:仅将错误记录到控制台.

虽然配置文件的使用似乎得到了适当的记录,但我找不到一个只有裸机代码的好例子.

我得到的最接近的是这篇文章仍然使用虚拟文件.

这是我最好的(虽然完全不成功)拍摄:

private static void configureLog4J() {
    PatternLayout layout = PatternLayout.createDefaultLayout();
    ConsoleAppender appender = ConsoleAppender.createDefaultAppenderForLayout(layout);
    LoggerConfig loggerConfig = new LoggerConfig();
    loggerConfig.addAppender(appender, DEBUG, null);
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

如果它仍然是RTFM案例,请指出我正确的方向.

java log4j log4j2

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

slf4j&log4j2 maven设置查询

我在我的项目中使用log4j2和slf4j并使用maven进行构建.我正在使用以下pom文件(仅显示相关的依赖项),但我收到下面复制的错误与此pom文件 - 任何想法我需要添加/删除以使其工作.我已经访问了错误中的url以及log4j2依赖项页面,因此请不要只指向响应中的URL.

信息:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Run Code Online (Sandbox Code Playgroud)

pom文件

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <slf4j.version>1.7.7</slf4j.version>
</properties>

   <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>


    <dependency>
        <groupId>com.lmax</groupId>
        <artifactId>disruptor</artifactId>
        <version>3.2.0</version>
    </dependency>

     <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.0.1</version>
     </dependency>

     <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.0.1</version> 
     </dependency>
Run Code Online (Sandbox Code Playgroud)

更新: 我在我的pom文件中添加了以下依赖项,我在mavenrepository中看到了jar - 虽然我在运行mvn clean/install时仍然看到相同的消息

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.0.1</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

java logging slf4j maven log4j2

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