标签: log4j2

Log4j2:将错误级别记录到特定文件中

在我的 log4j2 配置中,我将AsyncRoot设置为 INFO,因为我想在文件中记录此级别及更高级别。

但我还想将错误级别记录到特定文件中并记录在AsyncRoot中配置的附加程序中

这是我的配置:

<?xml version="1.0" encoding="utf-8"?>
<Configuration>
    <Appenders>
        <RollingFile name="file" fileName="${LOG_PATH}/${APP_NAME}.log" filePattern="${LOG_PATH}/${APP_NAME}-${FILE_PATTERN_TRAILER}.log">
            <PatternLayout pattern="${PATTERN_LAYOUT}"/>
            <Policies>
                <SizeBasedTriggeringPolicy size="50 MB"/>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy max="5"/>
        </RollingFile>
        <RollingFile name="errorFile" fileName="${LOG_PATH}/${APP_NAME}-errors.log" filePattern="${LOG_PATH}/${APP_NAME}-errors-${FILE_PATTERN_TRAILER}.log">
            <PatternLayout pattern="${PATTERN_LAYOUT}"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <AsyncRoot level="INFO">
            <AppenderRef ref="file"/>
        </AsyncRoot>

        <AsyncLogger level="ERROR">
            <AppenderRef ref="errorFile"/>
        </AsyncLogger>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

这是我想要实现的日志记录行为(无论包如何):

  • 所有INFO日志级别的日志都会记录到appender文件中
  • 所有具有ERROR日志级别的日志都会记录到appender文件errorFile中
  • 所有日志级别较低的日志(DEBUG、TRACE)根本不会被记录

谢谢

log4j2

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

无法让 Karaf 4.2.6 使用 log4j2 和 JsonLayout 作为布局类型进行日志记录

我一整天都在做这件事,但在尝试了这么多组合后却没有让它发挥作用。归根结底,我正在寻找从 Karaf 获取 JSON 日志记录的明确步骤列表。我什至浏览了 Maven Karaf 插件源代码,试图解决这个问题,尽管也许我看的还不够远。

我正在使用 Karaf 4.2.6。我正在尝试使用 karaf-maven-plugin 版本 4.2.6 构建 Karaf 部署。

如果我将layout.type各种附加程序更改为JsonLayout,我会得到一个堆栈跟踪,指出它无法加载 JSON 布局,因为我缺少一个类。java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ser/FilterProvider

我查看了 jar org.ops4j.pax.logging/pax-logging-log4j2/1.10.2,发现我需要 3 个 Jackson jar,Core v2.8.7、Annotations v2.8.0 和 Databind v2.8.7。

etc/startup.properties我一直在尝试以 5 或 8 的启动级别获取这些文件,以便它们org.ops4j.pax.logging/pax-logging-log4j2/1.10.2在启动时做好准备。我确保它们位于system文件夹中的正确位置。大多数时候,如果我确实将它们放入etc/startup.properties,它们的起始级别为 30。我将它们放置在具有正确起始级别的功能中,但它们要么在使用任何内容后就开始很好,startup.properties要么根本没有出现。我尝试了很多可能的组合,,,,startupBundlesstartupFeatures没有bootFeatures任何结果startup.properties。我无法弄清楚内容是如何startup.properties生成的。有时,我想要的应用程序功能甚至无法启动,因为如果我只是将这些 jar 的引用放在 中,则有关配置的某些内容在设置日志记录时被阻止startup.properties,例如

mvn\:com.fasterxml.jackson.core/jackson-core/2.8.7 = 5

下面是我的 pom.xml,其中注释掉了之前尝试的一些内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" …
Run Code Online (Sandbox Code Playgroud)

logging json maven apache-karaf log4j2

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

使用除 root 之外的多个记录器时的 log4j2 类名

我正在使用 log4j2。我定义了多个记录器,因此我的 log4j2.xml 如下所示:

   <Property name="LOG_PATTERN">[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</Property>
   ...
   ...
   <Loggers>
        <Logger name="trace" level="INFO" additivity="false">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="error" level="ERROR" additivity="false">
            <AppenderRef ref="errorLog" />
        </Logger>
        <Logger name="warn" level="WARN" additivity="false">
            <AppenderRef ref="warnLog" />
        </Logger>
   </Loggers>
Run Code Online (Sandbox Code Playgroud)

然后我从代码中调用它们。片段:

Class myclass{
...

    Logger LOGGER1 = LogManager.getLogger("trace");
    Logger LOGGER2 = LogManager.getLogger("error");
...
     LOGGER1.trace("whatever message");
Run Code Online (Sandbox Code Playgroud)

我的问题是,据我所知,当从代码调用记录器时,我可以从 log4j2.xml 指定记录器。例如,如果我想使用“跟踪记录器”,我可以编写 LogManager.getLogger("trace") 代码

然后,当“打印日志”时,%c{1} 不再是类名,而是记录器名称...在此示例中,log4j2 将打印为 %c“trace”而不是“myclass”(即我想要的是)。

我想知道,是否有可能:

  • 选项 1. 调用具体记录器,同时打印“真实”类名(不是在 getLogger 方法中作为参数传递的类名),
  • 选项 2. 在 gerLogger 方法中使用类名,并将此记录器从代码映射到 log4j2.xml 中的记录器

预先感谢您的线索。

java logging log4j2

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

如何使用 log4j2.properties 文件打印参数以及 Hibernate 5.4 生成的 sql

以下是我的文件的内容log4j2.properties。它打印sql但不打印参数。如何添加org.hibernate.type=trace或类似打印参数?

appenders = console, file
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
 
appender.file.type = File
appender.file.name = File
appender.file.fileName = app.log
appender.file.layout.type = PatternLayout
appender.file.layout.pattern = [%-5level] %d{dd-MM-yyyy HH:mm:ss.SSS} [%t] %c{1} - %msg%n
 
rootLogger.level = info
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT
rootLogger.appenderRef.file.ref = File
 
logger.hibernate.name=org.hibernate.SQL
logger.hibernate.level=debug
Run Code Online (Sandbox Code Playgroud)

hibernate log4j2

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

log4j-to-slf4j 未实现 org.apache.logging.log4j.LogManager

在我的项目中我使用 slf4j,

该项目包括一个使用的库org.apache.logging.log4j:log4j-api:2.14.0

因此,库通过以下方式获取其记录器org.apache.logging.log4j.LogManager.getLogger(abc.class)

我包含log4j-to-slf4j-2.x在我的项目中。但是,查看 log4j-to-slf4j-2.x 的内容显示该类没有实现。

当然,我的项目在运行时就死掉了NoClassDefFound org/apache/logging/log4j/LogManager

我缺少什么?

这不是重复的是否有一个让 log4j2 在 slf4j 上工作的适配器?因为我有一个特定的问题,需要与链接问题中提出的解决方案不同的解决方案。这个问题需要单独讨论。如果您不明白发生了什么,请停止废话结束!

java logging log4j slf4j log4j2

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

Spring引导不加载log4j2.xml

我正在尝试在我的 spring boot 应用程序中添加 log4j2 框架,并且我正在使用 spring AOP 将日志记录问题与我的逻辑业务隔离开来。不幸的是,当我尝试记录我的消息时,log4j2 不起作用,它使用 spring 默认日志记录。

这是我尝试记录消息的 Logging 方面类:LoggingAspect.java

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Aspect
@Component
public class LoggingAspect {
    @Around("com.obs.dqsc.api.config.AspectConfig.businessService() || com.obs.dqsc.api.config.AspectConfig.repositoryOperations()")
    public Object logMethod(final ProceedingJoinPoint joinPoint)
            throws Throwable {
        final Class<?> targetClass = joinPoint.getTarget().getClass();
        final Logger logger = LoggerFactory.getLogger(targetClass);

        try {
            final String className = targetClass.getSimpleName();
            logger.debug(getPreMessage(joinPoint, className));

            final StopWatch stopWatch = new StopWatch();
            stopWatch.start();

            final Object retVal = joinPoint.proceed();
            stopWatch.stop(); …
Run Code Online (Sandbox Code Playgroud)

java spring-aop maven log4j2 spring-boot

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

Log4j2未记录到控制台

我无法使Log4j 2登录到控制台。使用gradle运行时没有任何显示。

log4j2.xml 在项目根目录中:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ALL">
    <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="all">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

在我的课程中的用法:

public class ABCHandler {
    private final Logger logger = LogManager.getLogger();

    public ABC(String serialPortName) {
        logger.info("Opening serial port {}", serialPortName);
    }
}
Run Code Online (Sandbox Code Playgroud)

java logging log4j2

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

找不到log4j2配置文件

我很难理解这个问题有什么问题.

我有一个java项目(没有Eclipse/Maven)结构如下:

??? build
?   ??? classes
?   ?   ??? oata
?   ?       ??? HelloWorld.class
?   ??? jar
?       ??? HelloWorld.jar
??? build.xml
??? lib
?   ??? log4j-api-2.3.jar
?   ??? log4j-core-2.3.jar
??? myManifest
??? src
    ??? log4j2.xml
    ??? oata
        ??? HelloWorld.java
Run Code Online (Sandbox Code Playgroud)

当使用ant构建时,我不断发现无法找到log4j2配置文件.我已经查看了类似的问题,并且常见的问题是xml文件不在类路径中,这不是我的情况.无论如何这是错误:

[java] ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
Run Code Online (Sandbox Code Playgroud)

这是我的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="oata"
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> …
Run Code Online (Sandbox Code Playgroud)

java ant logging log4j2

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

log4j:WARN没有为logger找到appender(org.springframework.core.env.StandardEnvironment)

我正在尝试使用log4j的log4j2.xml,但我一直在使用

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
Run Code Online (Sandbox Code Playgroud)

文件位于src/main/resources下

 <?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="WIP">
  <Appenders>
    <Console name="console" target="SYSTEM_OUT">
        <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %MDC{threadTrackId} %40c{1.} - %msg%n"/>
    </Console>
</Appenders>
<Loggers>
    <Root level="warn">
        <AppenderRef ref="console"/>
    </Root>
    <Logger name="com.test" level="debug"/>
    <Logger name="org.springframework" level="info"/>
</Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

我不确定文件是否正确定位但其中的appender未正确读取或文件未找到.

在我的pom文件中,我有以下依赖项

<dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
    </dependency>
<dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

这是我在pom中的构建部分

  <build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.4.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.wirecard.wip.db.RecreateDatabase</mainClass>
                <cleanupDaemonThreads>false</cleanupDaemonThreads> …
Run Code Online (Sandbox Code Playgroud)

logging spring log4j maven log4j2

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

log4j2.xml中每个软件包的Log4J不同的日志级别

我有一个Java Web应用程序,log4j2.xml 每个包都需要具有不同的级别,例如:

com.myexample.firstmodule.*这应该是有INFO水平 com.myexample.secondmodule.*,这应该是与TRACE水平

我找到了一些答案,说明如何在.propreties文件中执行此操作,但是我不明白该如何使用.xml

有人可以帮忙吗?

提前致谢

java log4j2

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

标签 统计

log4j2 ×10

java ×6

logging ×6

maven ×3

log4j ×2

ant ×1

apache-karaf ×1

hibernate ×1

json ×1

slf4j ×1

spring ×1

spring-aop ×1

spring-boot ×1