标签: log4j2

如何通过运行时路径(工作目录)XML文件配置Log4j2,而不是类路径

我不能配置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配置.

使用的依赖项:

java logging log4j slf4j log4j2

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

Log4j 2 中的单独错误日志记录

Log4j 2 允许将类和行信息包含在日志条目中。然而,作者声称创建条目需要 4-5 倍的时间。

我的日志的 99.5% 由正常操作条目(信息)组成,其中 line 和 class 并不是真正必要的。我想知道是否有任何方法可以将 log4j 2 配置为仅将文件、类和行包含到带有“警告”或更高级别的条目中?

java configuration logging log4j2

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

日志未打印完整的堆栈跟踪

我正在尝试在我的日志文件中打印整个堆栈跟踪。这是我为各种课程编写的示例代码。还给出了日志文件的输出。我希望将整个堆栈跟踪记录打印在日志中。

生成异常的第一个示例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)

logging exception-handling exception stack-trace log4j2

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

将伪装和功能区日志重定向到 log4j2

我目前使用带有 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)

netflix log4j2 spring-boot spring-cloud netflix-feign

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

Log4j2没有看到配置xml

可能我搜索了所有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)

java logging log4j maven log4j2

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

如何使用log4j2与不同的日志文件?

我有一个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)

java log4j2

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

Log4j 2性能:单线程控制台在Logback中的记录速度比Log4j 2快吗?

最近,我尝试了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 logging log4j logback log4j2

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

带有第 3 方附加程序的 log4j2

我正在尝试在 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)

java sentry logentries log4j2

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

slf4j-log4j桥与log4j 2.8.1

我正在努力删除对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)

log4j bridge slf4j log4j2

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

Spring Cloud Logging 的最佳方法是什么?

我在 AWS 上将 Spring Boot 应用程序作为 Systemd 服务运行。结果,所有日志消息与 Linux 日志消息一起转到 system.log,这使得日志难以阅读。

什么是不淹没 system.log 并为每个应用程序/微服务保留单独日志的最佳方法?是 Log4j 2 吗?你能推荐替代品吗?

logging log4j2 spring-cloud

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