我不能配置Log4j2来读取XML文件的配置在工作目录.
我试图设置系统属性,因为文档说:
Log4j将检查"log4j.configurationFile"系统属性,如果设置,将尝试使用与文件扩展名匹配的ConfigurationFactory加载配置
使用Main类静态初始化程序块,也在main方法中,具有相对和绝对路径:
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
"E:/log4j2.xml");
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
"./log4j2.xml");
System.setProperty(XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY,
"log4j2.xml");另外随着"log4j.configurationFile"代替XMLConfigurationFactory.CONFIGURATION_FILE_PROPERTY并没有什么的的作品.
只有将XML添加到我的类路径中并将其放在src目录中时,此配置才有效.我想通过编辑工作目录中的XML文件来允许编译后的lightweid配置.
使用的依赖项:
Log4j 2 允许将类和行信息包含在日志条目中。然而,作者声称创建条目需要 4-5 倍的时间。
我的日志的 99.5% 由正常操作条目(信息)组成,其中 line 和 class 并不是真正必要的。我想知道是否有任何方法可以将 log4j 2 配置为仅将文件、类和行包含到带有“警告”或更高级别的条目中?
我正在尝试在我的日志文件中打印整个堆栈跟踪。这是我为各种课程编写的示例代码。还给出了日志文件的输出。我希望将整个堆栈跟踪记录打印在日志中。
生成异常的第一个示例DAO:
public String getPasswordByEmail(String email) throws UserException {
try {
beginNewTransaction();
PreparedStatement stmt = getConnection().prepareStatement(GET_PASSWORD_BY_EMAIL);
stmt.setString(1, email);
log.debug("PrepareStatement for selecting user password by email " + stmt.toString());
ResultSet rs = stmt.executeQuery();
if(rs != null) {
rs.next();
}
return rs.getString("password");
}
catch(SQLException sqe) {
throw new UserException("Could not retrieve user details",sqe);
} catch (JiffieTransactionException jte) {
throw new UserException("Error while securing the database connection", jte);
}
}
Run Code Online (Sandbox Code Playgroud)
调用DAO的示例服务类:
public String getPasswordByEmail(String email) throws UserException{
UserDAO userDao = new UserDAO();
return …Run Code Online (Sandbox Code Playgroud) 我目前使用带有 log4j2 的 spring cloud netflix。log4j2 配置来自类路径中的 xml。当我运行应用程序时,我看到 feign 和功能区日志没有被重定向到配置中指定的记录器。我已经配置日志com.netflix.ribbon&佯在登录包调试水平。
但是,为 spring 配置的日志正确重定向到指定的 appender,而ribbon 和 feign 则没有。
我将 gradle 与 spring-boot-starter-logging 忽略并添加了 spring-boot-starter-log4j2 作为我的构建的一部分。
我看到feign有一种我们可以配置 slf4j 的方法,但是由于我们使用注释驱动的 feign 支持,我无法将 feign 配置为使用 slf4j 进行日志记录。
任何帮助表示赞赏。
我的 log4j2.xml 看起来有点像
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="log-path">logs</Property>
<Property name="log-fileName">test</Property>
</Properties>
<Appenders>
<Console name="console-log" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" />
</Console>
<RollingFile name="trace-log" fileName="${log-path}/${log-fileName}-trace.log" filePattern="${log-path}/${log-fileName}_trace-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} …Run Code Online (Sandbox Code Playgroud) 可能我搜索了所有Internet,但是我必须错过一些东西。
我根据文档配置Log4j2和Commons-logging。我添加了log4j2.xml,但是它的配置对应用程序输出没有影响。我看起来Log4j无法读取此文件。这是我的配置:
pom.xml
<properties>
<log4j2.version>2.3</log4j2.version>
</properties>
<dependencies>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j2.version}</version>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
\ src \ main \ resources \ log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="TRACE">
<Properties>
<Property name="filename">fileName</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="Pattern Pattern %d{DEFAULT} %-5level %t : %logger{1} - %m%n"/>
</Console>
<RollingFile name="RollingFile"
fileName="${filename}.log"
filePattern="${filename}-%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%d{DEFAULT} %-5level %t : %logger{1} - %m%n"/>
<TimeBasedTriggeringPolicy/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.mydomain" level="TRACE"/>
<Root level="TRACE">
<AppenderRef ref="Console"/> …Run Code Online (Sandbox Code Playgroud) 我有一个log4j2.xml文件,我配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="log-path">${sys:catalina.base}/logs</Property>
</Properties>
<Appenders>
<!-- console appender -->
<Console name="console-log" target="SYSTEM_OUT">
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss} [%t] %c{1} - %msg%n"/>
</Console>
<!-- file appender -->
<RollingFile name="commons-log" fileName="${log-path}/commons.log"
filePattern="${log-path}/commons-%d{yyyy-MM-dd}.log">
<!-- log pattern -->
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
</PatternLayout>
<!-- set file size policy -->
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="5 MB" />
</Policies>
</RollingFile>
<RollingFile name="analytics-log" fileName="${log-path}/analytics.log"
filePattern="${log-path}/analytics-%d{yyyy-MM-dd}.log">
<PatternLayout>
<pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c{1} - %msg%n</pattern>
</PatternLayout>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
</RollingFile> …Run Code Online (Sandbox Code Playgroud) 最近,我尝试了Log4j 2日志记录,并尝试将其性能与我本地Mac机器上的Logback进行比较.令人惊讶的是,我看到Logback在我的测试用例中表现更好.我希望Log4j 2比Log4j 2网站声称的Logback做得更好,所以我想检查一下我在使用Log4j 2时是否做错了.
为了测试,我使用了直接Log4j 2和Logback 而不使用SLF4J.此外,它ConsoleAppender用于两个日志框架,我测试的模式是:
<Pattern>%d{YYYY-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
Run Code Online (Sandbox Code Playgroud)
日志测试代码是:
logger.info("This is a bootstrap message");
long start = System.currentTimeMillis();
for (int i = 1; i <= 1000000; i++) {
logger.info("Order={} successfully processed", "ABC123");
}
long end = System.currentTimeMillis();
logger.info("time taken to process={} ms", end - start);
Run Code Online (Sandbox Code Playgroud)
我为每个日志记录分别运行了10次测试,并尝试将平均时间用于处理.出乎意料的是,每次运行都会更好地执行logback.我尝试使用params禁用Log4j 2附带的默认GC日志记录:
-Dlog4j2.enable.threadlocals=false -Dlog4j2.enable.direct.encoders=false
Run Code Online (Sandbox Code Playgroud)
但我仍然没有看到有关logback的任何改进.任何人都可以确认我做的是否正确?
log4j 2配置:
<Configuration status="INFO" debug="false">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{YYYY-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n" />
</Console>
</Appenders> …Run Code Online (Sandbox Code Playgroud) 我正在尝试在 Java 应用程序(这是一个 Web API)中设置一些第三方 appender - appender 是作为依赖项添加的库。这是一个 Maven 应用程序,这些库是 Raven(通过 Sentry)和 Logentries。他们接受日志并提供图形用户界面来查看它们。
本地工作正常 - 当整个应用程序在本地运行时,日志成功显示在 Logentries 和 Sentry 中。在两种环境中都成功找到并解析了配置。我log4j2.xml在为两种环境启动服务器时的配置和输出包含在下面。
在登台环境中,我看到日志说 CLASS_NOT_FOUND,所以这可能是一个类路径问题?有任何想法吗?
配置
<?xml version="1.0" encoding="utf-8"?>
<configuration status="all">
<properties>
<property name="pattern">%d{hh:mm:ss.sss} [mode=${env:MODE}] [%t] %-5level %logger{36} - %msg%n</property>
</properties>
<appenders>
<console name="console" target="system_out">
<patternlayout pattern="${pattern}"/>
</console>
<raven name="sentry">
<dsn>[dsn_here]</dsn>
<patternlayout pattern="${pattern}"/>
<!--to turn down the noise-->
<!--<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>-->
</raven>
<logentries name="le">
<token>[token_here]</token>
<patternlayout pattern="${pattern}"/>
<!--to turn down the noise-->
<!--<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>-->
</logentries>
</appenders> …Run Code Online (Sandbox Code Playgroud) 我正在努力删除对log4j 1.x版本的任何依赖,因为它们已经EOL了.我的代码使用了slf4j-log4j12网桥.在maven中,slf4j-log4j的编译依赖关系显示版本为1.2.17的log4j,更新列显示为2.8.1.
所以我尝试在build.gradle中跟随,希望使用log4j-api-2.8.1代替默认提取的log4j-1.2.17.但这似乎并没有奏效.我仍然在依赖的jar中看到log4j-1.2.17.
所以我想问一下,这是不允许的事情?即没有slf4j-log4j桥接到log4j 2.8.1版本或者那个问题2.x版本?基本上我应该迁移我的代码以使用log4j-api-2.8.1.或者我在这里遗漏了什么?
dependencies {
compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.8.1'
compile group: 'org.slf4j', name: 'slf4j-log4j12', version: '1.7.25'
}
Run Code Online (Sandbox Code Playgroud) 我在 AWS 上将 Spring Boot 应用程序作为 Systemd 服务运行。结果,所有日志消息与 Linux 日志消息一起转到 system.log,这使得日志难以阅读。
什么是不淹没 system.log 并为每个应用程序/微服务保留单独日志的最佳方法?是 Log4j 2 吗?你能推荐替代品吗?
log4j2 ×10
java ×6
logging ×6
log4j ×4
slf4j ×2
spring-cloud ×2
bridge ×1
exception ×1
logback ×1
logentries ×1
maven ×1
netflix ×1
sentry ×1
spring-boot ×1
stack-trace ×1