在我的 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)
这是我想要实现的日志记录行为(无论包如何):
谢谢
我一整天都在做这件事,但在尝试了这么多组合后却没有让它发挥作用。归根结底,我正在寻找从 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要么根本没有出现。我尝试了很多可能的组合,,,,startupBundles但startupFeatures没有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) 我正在使用 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”(即我想要的是)。
我想知道,是否有可能:
预先感谢您的线索。
以下是我的文件的内容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) 在我的项目中我使用 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 上工作的适配器?因为我有一个特定的问题,需要与链接问题中提出的解决方案不同的解决方案。这个问题需要单独讨论。如果您不明白发生了什么,请停止废话结束!
我正在尝试在我的 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) 我无法使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项目(没有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) 我正在尝试使用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) 我有一个Java Web应用程序,log4j2.xml
每个包都需要具有不同的级别,例如:
com.myexample.firstmodule.*这应该是有INFO水平
com.myexample.secondmodule.*,这应该是与TRACE水平
我找到了一些答案,说明如何在.propreties文件中执行此操作,但是我不明白该如何使用.xml
有人可以帮忙吗?
提前致谢
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