我正在开发一个Eclipse RCP应用程序,并且已经付出了一些努力让log4j2在应用程序中运行.现在一切似乎工作正常,作为画龙点睛,我想让所有记录器异步.
我已经设法在类路径上获得LMAX Disruptor,并认为我已经解决了提供的问题sun.misc.-DLog4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector在运行配置中设置VM参数,并正确设置log4j2.xml文件.我想.这就是问题所在.我希望能够以正确的方式验证我的应用程序以异步方式记录,因此我可以享受延迟方面的好处.
我怎么能 - 然后 - 在过程中利用LMAX Dirsuptor验证我的记录器是否异步工作?
最近,一个 0day 漏洞被披露,该漏洞利用了log4j 中的安全漏洞,允许未经授权的远程代码执行。
我想知道,真正的原因是什么,为什么 log4j 实现了这个 JNDI 查找,这根本导致了漏洞?
在 log4j 中使用此 LDAP 查找功能的示例是什么?
我目前正在开始一个新的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)
我需要将事件记录到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的日志消息的格式?
我刚刚将一个新项目的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,一切正常.
我正在处理 log4j 1 到 log4j 2 的迁移。在 AppConfigInitializer 文件中,我们使用这样的东西 -
BasicConfigurator.configure(consoleAppender);
Run Code Online (Sandbox Code Playgroud)
我应该用什么替换它以使其在 log4j2 中工作。我也在使用向后兼容桥,但这破坏了 BasicConfigurator 实现。
我想我需要使用配置文件来做到这一点,但无法找到方法。
如何在运行时通过java在log4j2中动态打开或关闭rootLogger的一个appender?
例如,我想禁用Console Appender:
...
<Loggers>
<Root level="INFO">
<AppenderRef ref="Console"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
...
Run Code Online (Sandbox Code Playgroud)
可能吗?
如果没有在Web应用程序中运行,关闭Log4j2的正确方法是什么?我只看到一个noop LogManager.shutdown()
我是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) 在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要调用哪种方法?