标签: log4j2

如何验证log4j2是通过LMAX disruptor异步记录的?

我正在开发一个Eclipse RCP应用程序,并且已经付出了一些努力让log4j2在应用程序中运行.现在一切似乎工作正常,作为画龙点睛,我想让所有记录器异步.

我已经设法在类路径上获得LMAX Disruptor,并认为我已经解决了提供的问题sun.misc.-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector在运行配置中设置VM参数,并正确设置log4j2.xml文件.我想.这就是问题所在.我希望能够以正确的方式验证我的应用程序以异步方式记录,因此我可以享受延迟方面的好处.

我怎么能 - 然后 - 在过程中利用LMAX Dirsuptor验证我的记录器是否异步工作?

java logging asynchronous log4j log4j2

15
推荐指数
2
解决办法
5278
查看次数

log4j 中 LDAP 查找功能背后的意义

最近,一个 0day 漏洞被披露,该漏洞利用了log4j 中的安全漏洞,允许未经授权的远程代码执行。

我想知道,真正的原因是什么,为什么 log4j 实现了这个 JNDI 查找,这根本导致了漏洞?

在 log4j 中使用此 LDAP 查找功能的示例是什么?

log4j log4j2

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

如何使用log4j 2.0和slf4j以及Commons一起登录

我目前正在开始一个新的Webapp(在tomcat 6上运行)我有使用slf4j的组件和使用commons日志记录的组件我计划使用log4j 2.0作为日志实现由于几个原因(主要用于appender:SocketAppender和SyslogAppender但也因为提升配置重新加载而不丢失日志事件)

现在我的问题是: - 我在哪个界面编程我的新课程?loag4j还是slf4j?甚至公共伐木?

  • 部署罐子的首选方式是什么?把它们放在我的应用程序大战中还是我把它们放到tomcat库中?

  • 我需要部署哪些罐子?log4j(包括slf4j和commons绑定),commons logging(slf4j-api-1.7.2.jar)和slf4j api(slf4j-api-1.7.2.jar)

java logging slf4j apache-commons-logging log4j2

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

log4j2 - Syslog appender和PatternLayout

我需要将事件记录到syslog中.我使用lo4j2和syslog appender.我的appenders阻止log4j2.xml看起来像这样:

<appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <Syslog name="syslog" host="localhost" port="514" protocol="UDP" charset="ISO-8859-1">
        </Syslog>
        <RollingFile name="AppLog" fileName="/var/log/app.log"
                     filePattern="/var/log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
        </RollingFile>          
    </appenders>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我有一个Console appender和RollingFile appender以及一个特定的PatternLayout.我想为Syslog appender使用相同的PatternLayout.但是,syslog中的日志消息似乎总是使用预定义的布局.我试着做以下事情:

<Syslog name="syslog" host="localhost" port="514" protocol="UDP" charset="ISO-8859-1">
    <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Syslog>
Run Code Online (Sandbox Code Playgroud)

但这没有任何影响.系统日志消息仍然具有相同的预定义格式.

如何确定进入syslog的日志消息的格式?

java log4j syslog log4j2

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

将LogManager(l4j2)与Java 8一起使用时出错(无法解析java.lang.reflect.AnnotatedElement)

我刚刚将一个新项目的JDK版本从7u45切换到8u20时遇到了一个奇怪的错误.我的类开头的无害LogManager声明被拒绝,并出现以下错误:

无法解析java.lang.reflect.AnnotatedElement类型.它是从所需的.class文件间接引用的

这是代码:

public class Class1 {   
    private static Logger log = LogManager.getLogger(Class1.class); 
    ...
Run Code Online (Sandbox Code Playgroud)

Eclipse建议我配置构建路径,但我不知道要配置什么,因为我不知道该错误的根本问题.

使用JDK与版本7,一切正常.

java java-7 java-8 log4j2

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

log4j2 中的 BasicConfigurator 替换

我正在处理 log4j 1 到 log4j 2 的迁移。在 AppConfigInitializer 文件中,我们使用这样的东西 -

BasicConfigurator.configure(consoleAppender);
Run Code Online (Sandbox Code Playgroud)

我应该用什么替换它以使其在 log4j2 中工作。我也在使用向后兼容桥,但这破坏了 BasicConfigurator 实现。

我想我需要使用配置文件来做到这一点,但无法找到方法。

java logging log4j2

14
推荐指数
2
解决办法
6830
查看次数

如何在log4j2中动态打开或关闭rootLogger的一个appender?

如何在运行时通过java在log4j2中动态打开或关闭rootLogger的一个appender?

例如,我想禁用Console Appender:

...
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
...
Run Code Online (Sandbox Code Playgroud)

可能吗?

java log4j log4j2

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

如何正确关闭log4j2

如果没有在Web应用程序中运行,关闭Log4j2的正确方法是什么?我只看到一个noop LogManager.shutdown()

java logging log4j application-shutdown log4j2

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

Spring日志没有写入log4j2

我是spring和log4j的新手.我正在尝试使用spring框架和使用log4j2库的示例Hello World项目.我的src文件夹中有log4j2.xml.当我运行应用程序时,只有我的应用程序日志写在日志文件中.弹簧日志没有写入.但是我可以在控制台中看到它们.我在我的类路径中有公共记录jar(spring dependency),log4j2和spring jar.如果我在这里缺少任何配置,任何人都可以帮助我吗?

我的log4j2 xml文件,

<?xml version="1.0" encoding="UTF-8"?>
<configuration  status="trace" 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="trace">
  <AppenderRef ref="consoleAppender"/>
  <AppenderRef ref="fileAppender"/>
</Root>
</Loggers>  
</configuration>
Run Code Online (Sandbox Code Playgroud)

我的代码:

public class MainApp {
static Logger log = LogManager.getLogger(MainApp.class.getName());

public static void main(String[] args) {
  ApplicationContext context = 
         new ClassPathXmlApplicationContext("Beans.xml");

  log.info("Going to create HelloWord Obj");

  HellowWorld obj = (HellowWorld) context.getBean("helloWorld");

  obj.getMessage();

  log.info("Exiting …
Run Code Online (Sandbox Code Playgroud)

java spring log4j apache-commons-logging log4j2

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

使用lambda参数记录kotlin

在log4j2中,我们有一个方便的功能,描述为

// Java-8 style optimization: no need to explicitly check the log level:
// the lambda expression is not evaluated if the TRACE level is not enabled
logger.trace("Some long-running operation returned {}", () -> expensiveOperation());
Run Code Online (Sandbox Code Playgroud)

我试图在kotlin中使用它

log.debug("random {}", { UUID.randomUUID() })
Run Code Online (Sandbox Code Playgroud)

这将打印

random Function0<java.util.UUID>
Run Code Online (Sandbox Code Playgroud)

我们如何使用kotlin使用lambda参数记录?或者我们如何明确告诉kotlin要调用哪种方法?

java-8 kotlin log4j2

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