Tag: log4j

Log4J2 appender没有登录到ThreadContext文件夹

我有以下Log4J2配置XML: [%date{ISO8601}][%-5level][%logger{1.}][%marker][$${ctx:employeeId}] %X%m%n 但是,只要log4j2 appender写入文件,它在写入指定的文件路径时就不会使用正确的${ctx:employeeId}字符串。 log4j2 appender第一次写入文件时,会写入${ctx:employeeId}指定的正确文件路径。 但是,每当有关具有另一个Id的员工的信息被放入线程上下文时,appender仍然会记录到旧文件路径。 例如,appender第一次记录它写入正确的路径: D:/example/logs/sites/1/2015-08-22/2/emp.log 但是当记录器记录下一个雇员Id(使用新的ThreadContext)时,它仍然登录 D:/example/logs/sites/1/2015-08-22/2/emp.log 而不是例如: D:/example/logs/sites/1/2015-08-22/3/emp.log (注意员工ID不同。) 在日志输出模式中,我记录当前employeeId [$${ctx:employeeId}] ,以及当前线程上下文%X 。 输出显示正在使用正确的employeeId并且在ThreadContext中,但是appender没有记录到${ctx:employeeId}文件路径。 有谁知道我错过了什么吗? 或者如果我做错了什么? 或者这可能是Log4j2的错误? 谢谢你的帮助!

按大小和时间滚动日志

我使用log4j 1.2.16 RollingFileAppender ,当它们达到一定大小时会滚动日志文件。 现在我想每天滚动日志文件,当它们达到一定大小时。 因此,每天将有一个或多个日志文件。 例如, myapp.log MYAPP-17.12.2013.log MYAPP-16.12.2012.log MYAPP-16.12.2012.1.log MYAPP-16.12.2012.2.log 是否有一个现成的appender,它已经做到了吗?

Log4j中包含日期的文件名

我正在尝试将当前日期追加到log4j日志文件中。 所以它会是这样的: 对myApp-2011-01-07.log 问题是我不想使用DailyRollingFileAppender。 原因是每天都会运行另一个脚本来备份logs文件夹中的所有内容。 这是在Tomcat5.5下运行的。 这可能在log4j中吗?

在java桌面应用程序中使用log4j时如何在特定位置创建日志

我在Eclipse中使用log4j来记录java桌面应用程序中的消息。 我希望日志应该在特定的文件夹中创建(具体来说,在包含源文件夹’src’和类文件夹’bin’的文件夹中)。 是否可以在log4j.properties中设置它? 如何确保仅在此位置创建日志?

覆盖log4j.properties

我的java应用程序引用了一个使用log4j日志记录的第三方jar文件。 问题是这个jar包含自己的log4j.properties文件,该文件在我的机器上导致访问被拒绝的exception,但是我没有控制jar文件来改变它的内容。 我已经尝试在我的应用程序的类路径中添加我自己的log4j.properties文件,但它似乎没有效果。 如果我尝试使用PropertyConfigurator以编程方式导入我自己的设置,log4j似乎首先加载jar文件的属性文件(导致exception)。 如何将log4j短路以忽略第三方jar文件的log4j.properties文件并使用我自己的文件?

配置Log4j属性路径的最佳实践

我在我的应用程序中使用Log4j。 log4j.properties放置在类路径中的Jar中。 正在使用此配置文件,并且大多数时候都可以正常工作。 但有时,生成的日志记录语句不符合配置文件。 我的理解是,这是因为属性文件是从类路径中获取的。 无论第一个属性文件是什么,都是由log4j提取和使用的。 因此,有时我们会使日志语句与属性文件中配置的日志语句不同。 如果上述原因是正确的,那么我认为,我们需要通过以下方式之一具体指定配置文件: 使用系统属性指定:-Dlog4j.configuration = log4j.properties 初始化Log4jInit servlet。 请建议哪种方法更好。

Log4J:如何将OutputStream或Writer重定向到logger的writer?

我有一个方法,它在启动后以异步方式运行,使用OutputStream或Writer作为参数。 它充当OutputStream或Writer的录制适配器( 它是我无法更改的第三方API )。 我怎么能将Log4J的内部OutputStream或Writer传递给该方法? …因为Log4J吞下了System.out和System.err,我之前使用过。

NoSuchMethodError:org.slf4j.impl.StaticLoggerBinder.getSingleton()

这个问题是由我的pom.xml [cxf-bundle-jaxrs]中的一个依赖项引起的,它在内部使用较低版本的slf4j。 我设法通过将此依赖项升级到最新版本来解决此问题。 感谢大家。 我正在尝试将Apache Shiro添加到我的CXF Spring Web应用程序中。 当我启动我的tomcat 7时,我收到以下错误 Caused by: java.lang.NoSuchMethodError: org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLoggerBinder; at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254) at org.apache.shiro.spring.LifecycleBeanPostProcessor.(LifecycleBeanPostProcessor.java:51) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:100) at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:61) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:877) … 25 more 我的shiro和slf4j的pom.xml是 org.apache.shiro shiro-core 1.2.2 org.apache.shiro shiro-web 1.2.2 org.apache.shiro shiro-spring 1.2.2 org.slf4j […]

log4j RollingFileAppender创建的日志文件的权限

如何确定RollingFileAppender创建的文件的权限? 我最近更改了一个守护进程,我必须以非root用户身份运行,现在正在使用0600权限创建文件(只有所有者可读),但我希望所有或至少成员都能读取它们管理员组( 0644或0640 )。 我的tomcat应用程序创建的文件总是0644 (所有人都可读)。 我不知道我是否无意中改变了其他内容,或者是否与该用户的权限有关。 我将父目录0777作为测试,它似乎没有帮助(它是0755 )。 显然不是什么大不了,因为我可以sudo看他们,但相当恼人,如果我必须让客户为我复制它将是一个问题。 环境是Ubuntu 10.04LTS,使用jsvc/commons-daemon来运行守护进程。 如果重要的是我的log4j配置的基础知识: ….

Log4j2在apender中过滤特定级别

我应该使用什么filter来定义用apender记录的特定级别? 例如: Java的: LOGGER.debug(“Debug message”); LOGGER.info(“Info message”); LOGGER.warn(“Warn message”); LOGGER.error(“Error message”); LOGGER.fatal(“Fatal message”); log4j2.xml: 文件输出很好,但在控制台我有这样的结果: [application.Main] [INFO] Info message [application.Main] Info message [application.Main] [WARN] Warn message [application.Main] Warn message [application.Main] [ERROR] Error message [application.Main] Error message [application.Main] [FATAL] Fatal message [application.Main] Fatal message 但我需要info-stdout-message appender只输出INFO消息,而detail detailed-stdout-message输出所有EXEPT INFO。 所以控制台输出应该如下所示: [application.Main] Info message [application.Main] [WARN] Warn message […]