Tag: log4j

获取exceptionorg.apache.logging.slf4j.SLF4JLoggerContext无法强制转换为org.apache.logging.log4j.core.LoggerContext

使用apache-log4j-2.0.2我的代码非常简单: import org.apache.log4j.BasicConfigurator; import org.apache.log4j.Logger; public class Log4jtest { static Logger log =Logger.getLogger(Log4jtest.class); public static void main(String[] args) { BasicConfigurator.configure(); log.debug(“This is debug message”); } } 但我得到的例外是: Exception in thread “main” java.lang.ExceptionInInitializerError Caused by: java.lang.ClassCastException: org.apache.logging.slf4j.SLF4JLoggerContext cannot be cast to org.apache.logging.log4j.core.LoggerContext“ at org.apache.log4j.Logger.getLogger(Logger.java:41) at Log4jtest.(Log4jtest.java:11) 为什么exception来自一个简单的程序?

使用log4j2的多个线程的不同日志文件

我正在运行一个Java应用程序,我在其中调用多个线程,每个线程都有一些唯一的名称。 现在我想为每个日志文件创建多个日志文件,日志文件的名称应该作为线程名称。 这可能是使用log4j2。 请帮我写log4j2配置文件。 先谢谢你。

如何使用自定义文件而不是log4j.properties

我在我的java项目中使用log4j。 而不是log4j.properties,我想配置另一个文件…任何人都可以帮助我…在此先感谢..

为什么Log4j rootLogger没有根据事件级别过滤日志事件?

为什么我的应用程序中的Log4j rootLogger没有根据级别过滤日志事件? 在我的log4j.properties ,我有几个记录器: log4j.rootLogger=info,stdout log4j.logger.com.name.myapp=debug,myapp log4j.logger.org.castor=debug,castor log4j.logger.org.exolab.castor=debug,castor log4j.logger.org.hibernate=debug,hibernate log4j.logger.org.springframework=debug,spring 每个记录器接收并记录DEBUG及以上级别的大量日志事件,这是我期望和期望的。 然而,尽管设置为级别INFO , rootLogger也会显示所有这些事件,包括DEBUG事件,这不是我期望的,也不是我想要的。 相反,我希望它过滤DEBUG事件,但只显示INFO级别和更高级别( WARN , ERROR和FATAL )的事件,这也是我想要的。 为什么rootLogger显示所有事件?

Log4j2自定义插件 – 使用Maven Assembly Plugin进行注释处理

我对Maven不太熟悉,我昨天开始使用它,但我喜欢它。 在我的项目中,我使用Log4j2库进行日志记录,由于高级插件(如appender,转换器)的不足, 我需要使用自定义插件 。 log4j-api和log4j-core (还有一堆其他库)作为依赖项添加到与我的项目关联的pom.xml中。 实际上我使用的是Log4j的2.0版本。 Log4j使用注释处理来预加载标记为@Plugin类。 据我所知,在较早版本的log4j中,必须在pom.xml中指定其他插件条目才能触发插件处理,或者必须在配置文件中的packages属性中键入包含自定义插件的packages ( https:/ /logging.apache.org/log4j/2.x/manual/configuration.html#ConfigurationSyntax )。 但是自2.0-rc2以来,这不受支持。 在v2.0中,只要log4j-core可用于构建引擎,就应该自动完成。 myproject-0.0.1-SNAPSHOT.jar / META-INF / org / apache / logging / log4j / core / config / plugins /中有一个文件Log4j2Plugins.dat ,它包含我的自定义插件的映射 – 没关系。 对于使用Maven进行构建,我还使用了Maven Assembly Plugin 。 它的目标single是捆绑到package阶段。 打包项目后,我自然在目标目录中有一个额外的jar – myproject-0.0.1-SNAPSHOT-jar-with-dependencies.jar 。 但是,此jar中的Log4j2Plugins.dat文件包含原始插件的映射,与log4j-core库中的文件相同。 这就是问题,因为它没有任何对我的自定义插件的引用。 似乎来自myproject-0.0.1-SNAPSHOT.jar的文件被log4j库中的原始文件覆盖,但我不确定是什么情况。 因此,当我运行myproject-0.0.1-SNAPSHOT-jar-with-dependencies.jar时 ,log4j无法从我的项目中找到插件类。 我认为myproject-0.0.1-SNAPSHOT.jar运行正常,但是如果没有依赖项我就无法运行它。 配置中的packages属性应该在2.0.1版本中重新启用,但如果我不想等待发布,我必须使用注释处理方法。 你知道如何解决它吗? 我尝试使用log4j的2.0-rc1版本运行它,其中配置元素的packages属性可用。 结果是: […]

log4j ConversionPattern时间戳以微秒为单位

我想在log4j生成的日志文件的每个条目的时间戳中添加微秒,是否可能? 我在官方文档中搜索过但没有提到毫秒以下的单位。 现在我有一个如下所示的转换模式: %d{dd/MM/yyyy HH\:mm\:ss,SSS} %-5p [%t] – %m%n 在日期转换模式( %d )中我想在毫秒值( SSS )之后添加微秒 ,有没有办法做到这一点?

禁用log4j控制台日志记录并启用文件日志记录

我的log4j.properties文件是: log4j.rootLogger=WARN, stdout, file log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d [%t] %p [%c] – %m%n log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=${jboss.server.log.dir}/afrodite.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.Append=true log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d [%t] %p [%c] – %m%n log4j.logger.info.release.scheduler=INFO, scheduler log4j.appender.scheduler=org.apache.log4j.RollingFileAppender log4j.appender.scheduler.File=${jboss.server.log.dir}/afrodite_scheduler.log log4j.appender.scheduler.MaxFileSize=10MB log4j.appender.scheduler.MaxBackupIndex=10 log4j.appender.scheduler.Append=true log4j.appender.scheduler.layout=org.apache.log4j.PatternLayout log4j.appender.scheduler.layout.ConversionPattern=%d [%t] %p [%c] – %m%n 如果我想为调度程序记录器禁用控制台输出,我该怎么办? 这意味着调度程序记录器仅登录到不在控制台中的文件。 感谢致敬。

如何为log4j消息添加前缀(在对象级别)

我使用log4j2,我想为我的所有消息添加一个前缀。 此前缀将传递给构造函数参数,它取决于类的实例。 所以我们处于对象级别(不是类或线程)。 例如,我有一个实例化的A类,如new A(152) ,所以当我在这个类上使用log.error(“message”)时,就会在消息之前写入152: log.error(“message”) 对于new A(155) ,将显示155:代替。 谢谢你的帮助

当我们打开或关闭某些日志位置时,log4j实际上在做什么?

我们知道我们可以通过其属性/配置文件来配置log4j以关闭特定位置(Java中的类或包)的日志。 我的问题如下: 什么是log4j实际上为那些标志做什么? log4j中的日志语句是否仍然被调用但是由于该标志而没有被写入文件或控制台? 那还有性能影响吗? 它是否像C ++中的#ifdef一样在编译时生效然后可以限制性能影响? 谢谢,

如何区分日志文件中的log4j会话与同一个Web应用程序的副本?

只有一个文件。 它随着Web应用程序副本的运行同时编写。 如何仅从其他日志行过滤一个会话日志消息?