标签: log4j2

MonitorInterval 在 log4j2 中不起作用

我尝试在应用程序中使用 log4j2 来允许在运行时动态重新配置日志级别。但我无法成功让 MonitorInterval 工作。控制台和文件附加程序工作正常。这是我的 log4j2.xml,

<?xml version="1.0" encoding="UTF-8"?>
<Configuration monitorInterval="5">
<Appenders>
<Console name="consoleAppender" target="SYSTEM_OUT">
  <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
</Console>
<File name="fileAppender" fileName="learning.log" append="true">
  <PatternLayout pattern="%t %-5p %c{2} - %m%n"/>
</File>
</Appenders>

<Loggers>
<Root level="error">
  <!--  <AppenderRef ref="consoleAppender"/>-->
  <AppenderRef ref="fileAppender"/>
</Root>
</Loggers>  
</Configuration>
Run Code Online (Sandbox Code Playgroud)

请帮忙查找问题。谢谢!

java logging error-logging log4j log4j2

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

Log4j2 自定义翻转策略

有没有办法在 log4j2 中编写自定义 RolloverStrategy?我想删除超过 14 天的旧文件,而 log4j2 目前不支持它(https://issues.apache.org/jira/browse/LOG4J2-524)。

我编写了一个自定义策略并尝试实现 RolloverStrategy 接口,但我没有看到它在文件翻转时被触发。

log4j2

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

获取 Log4j2 日志文件位置以写入包含日期的目录

如何获取 log4j 日志文件的位置?我试过这个:我可以在哪里以编程方式找到 log4j 日志文件的存储位置?

但它不适用于较新版本的 log4j。

我正在创建包含系统日期的文件,但是当我检索路径时,时间戳会发生变化。

java junit log4j log4j2

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

Log4J 2 异步记录器和线程

我正在尝试使所有 Log4J 2 记录器与 IMAP Disruptor 异步。我正确设置了干扰器依赖项,并且在 IntelliJ 中,我在 VM 选项下设置了以下系统属性。

-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector
Run Code Online (Sandbox Code Playgroud)

我的 log4j2.xml 文件是这样的。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
<Appenders>
    <Console name="Console-Appender" target="SYSTEM_OUT">
        <PatternLayout>
            <pattern>
                [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
            </pattern>>
        </PatternLayout>
    </Console>
    <File name="File-Appender" fileName="logs/xmlfilelog.log" >
        <PatternLayout>
            <pattern>
                [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
            </pattern>
        </PatternLayout>
    </File>
</Appenders>
<Loggers>
    <Logger name="guru.springframework.blog.log4j2async" level="debug">
        <AppenderRef ref="File-Appender"/>
    </Logger>
    <Root level="debug">
        <AppenderRef ref="Console-Appender"/>
    </Root>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

我的记录器类有这个代码。

package guru.springframework.blog.log4j2async;

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

public class Log4J2AsyncLogger {

private static …
Run Code Online (Sandbox Code Playgroud)

java logging log4j log4j2

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

log4j2 默认翻转策略不删除日志

我的 log4j2 具有这样设置的默认翻转策略 -

<RollingFile name="RollingFile" fileName="cc" filePattern="logs/${baseFileName}-%d{yyyy-MM-dd}.log.gz">
        <PatternLayout>
            <pattern>%d{dd/MMM/yyyy HH:mm:ss,SSS}- %c{1}: %m%n</pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        </Policies>
        <DefaultRolloverStrategy>
            <Delete basePath="logs/">
                <IfFileName glob="logs/${baseFileName}-*.log" />
                <IfLastModified age="2d" />
            </Delete>
        </DefaultRolloverStrategy>
    </RollingFile>
Run Code Online (Sandbox Code Playgroud)

所以当它超过 2 天时应该删除最旧的文件吗?

我的日志文件存储在项目的基本路径中名为 logs..的文件夹中。

但是我只是做了一个测试运行,它在我停止之前得到了 5 个文件......

知道是什么原因造成的吗?

log4j2

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

log4j2 无限滚动文件

我正在使用 log4j2 并尝试使用 log-rotation 进行记录。具体来说,我想以 10MB 的最大大小登录并无限制地旋转。下面的配置生成了 3 代滚动文件,因为“DefaultRolloverStrategy max”设置为 3。请指导我如何以 10MB 的最大大小记录无限数量的文件?

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Properties>
        <Property name="format1">%m%n</Property>
        <Property name="logfile">${sys:logDirectory}/log.log</Property>
        <Property name="logfile-archive">${sys:logDirectory}/log_%d{yyyy-MM-dd}.%i.log
        </Property>
    </Properties>
    <Appenders>
        <RollingFile name="logfile001" append="true" fileName="${logfile}"
            filePattern="${logfile-archive}">
            <PatternLayout>
                <pattern>${format1}</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="10MB" />
            </Policies>
            <DefaultRolloverStrategy max="3" />
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="trace">
            <AppenderRef ref="logfile001" />
        </Root>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

log4j2

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

如何过滤 log4j2 中未设置的标记?

我想以记录所有没有标记的消息的方式配置 log4j2。仅当配置文件中有此标记的特殊 ACCEPT 规则时,才应记录所有带有标记的消息。

我没有找到任何可以检测“无标记集”情况的过滤规则。有没有或者我必须自己实施?

log4j2 配置的过滤器部分可能类似于以下示例,但NoMarkerFilter语句应捕获未设置标记的情况。

<Filters>
        <MarkerFilter marker="SQL_UPDATE" onMatch="ACCEPT" onMismatch="NEUTRAL" />
        <NoMarkerFilter onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
Run Code Online (Sandbox Code Playgroud)

java log4j2

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

Log4J 2 查找值在加载/存在之前在配置中使用

我正在使用 SystemPropertiesLookup 查找来配置我的 Log4J2 配置。系统属性设置为我的主要方法中的第一行。问题是,Log4J加载配置的时候,main方法还没有调用,所以系统属性也没有填写。

这是我的 log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" packages="org.base">
    <appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%highlight{%d [%c{1}] %-5level: %msg%n}{STYLE=Logback}"/>
        </Console>

        <File name="AppLog" fileName="logs/app-${sys:MIGRATION_ENV:-UNKNOWN}-${sys:MIGRATION_TITLE:-UNKNOWN}.log" append="false">
            <PatternLayout pattern="%d [%c{1}] %-5level: %msg%n"/>
        </File>
    </appenders>

    <loggers>
        <root level="error">
            <appender-ref ref="Console" level="error"/>
            <appender-ref ref="AppLog" level="error"/>
        </root>
        <logger name="org.base" level="debug" additivity="false">
            <appender-ref ref="Console" level="debug"/>
            <appender-ref ref="AppLog" level="debug"/>
        </logger>
    </loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)

该文件将被称为 app-UNKNOWN-UNKNOWN,因为当 Log4J 填充它时,属性尚不可用。

有没有办法让 Log4J 等待,最好不要将配置移动到 Java 代码?

这些属性必须在运行时设置(main 方法的第一行)。

一个可能的解决getLogger(..)方法是只在该方法之后调用,而不是用变量初始化它,但它并不真正适合我的任务。

java lookup log4j2

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

使用 Intellij 和 Kotlin 找不到 Log4j2 配置

我用 Gradle 和 Kotlin DSL 构建脚本构建了一个新的 IntelliJ 项目,只有 Kotlin (Java) 和 Java 版本 10.0.2 作为项目 SDK。

我将 log4j 的依赖项添加到 build.gradle.kts 中:

compile("org.apache.logging.log4j:log4j-api:2.11.1")
compile("org.apache.logging.log4j:log4j-core:2.11.1")
Run Code Online (Sandbox Code Playgroud)

我将一个 log4j2.yaml 文件放入 /src/main/resources 并进行了一些配置。

当我现在运行这个测试程序时:

import org.apache.logging.log4j.LogManager

fun main(args: Array<String>) {
    val logger = LogManager.getLogger()!!

    logger.warn("Warn")
    logger.info("Info")
    logger.debug("Debug")
}
Run Code Online (Sandbox Code Playgroud)

我没有得到日志输出但是这条消息

ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for …
Run Code Online (Sandbox Code Playgroud)

java intellij-idea kotlin log4j2

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

将 commons-logging 连接到 slf4j-api

想知道我应该包含的依赖项,以将 commons-logging 桥接到 slf4j-api。

通过添加以下内容,我的构建成功:

"org.apache.logging.log4j:log4j-api:2.12.1"
"org.apache.logging.log4j:log4j-core:2.12.1"
"org.apache.logging.log4j:log4j-1.2-api:2.12.1"
"org.slf4j:slf4j-api:${slf4j_version}"
"org.apache.logging.log4j:log4j-slf4j-impl:2.12.1"
"org.slf4j:slf4j-jcl:1.7.25"
Run Code Online (Sandbox Code Playgroud)

但无法启动我的服务:( Getting java.lang.ExceptionInInitializerError... 引起:org.springframework.beans.factory.CannotLoadBeanClassException

slf4j apache-commons-logging log4j2 slf4j-api

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