- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 log4j-1.2.16.jar 或我的项目这是我的 log4j.properties
# The default root appender - used to log service calls to console
log4j.rootLogger=INFO, LOGGER1, LOGGER2
#LOGGER1 is set to be a ConsoleAppender which outputs to System.out.
log4j.appender.LOGGER1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOGGER1.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGGER1.DatePattern='.'yyyy-MM-dd
log4j.appender.LOGGER1.layout.ConversionPattern=[%d] %p [%X{USER_EMAIL}] %t %c - %m%n
log4j.appender.LOGGER1.File=D:/DevLogs/logger1.log
log4j.appender.LOGGER1.Threshold = ERROR
# An extra category to a log API Calls to a file
log4j.appender.LOGGER2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOGGER2.DatePattern='.'yyyy-MM-dd
log4j.appender.LOGGER2.File=D:/DevLogs/logger2.log
log4j.appender.LOGGER2.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGGER2.layout.ConversionPattern= [%d] %p [%X{USER_EMAIL}] %t %c - %m%n
log4j.appender.LOGGER2.Threshold = INFO
以前,我有两个 tomcat 服务器用于两个不同的应用程序,其中包含两个 log4j.properties
和正确创建的日志。现在我只有一个 tomcat 服务器,我们将这两个应用程序 war 合并为一个 war 。但是有几个服务依赖于这个应用程序,我们需要为一个版本提供向后兼容性。所以我们在 tomcat 上只有一个 war 文件,但是通过更改 server.xml
中的配置,我们使用它来创建两个不同的上下文。这是我的 server.xml
<Connector port="8180" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" server="Not Available" maxThreads="1500"/>
<Connector port="8280" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8445" server="Not Available" maxThreads="1500"/>
<Context docBase="application.war" path="/firstApplication" reloadable="true" />
<Context docBase="application.war" path="/secondApplication" reloadable="true" />
应用程序运行良好。但是我的日志滚动到错误的文件中。例如,今天是 7 月 2 日,所以直到下午,日志都可以正常工作,但之后 7 月 2 日的日志在一天之前开始打印,即 7 月 1 日的文件。另一个复杂的是这个过程跳过周末。意味着周六和周日,日志很好,但周一的日志在周五的日志文件中移动。我完全空白,出了什么问题。相同的配置文件适用于两个不同的服务器,但在两个逻辑上下文中存在问题。如果有人有任何建议,请告诉我。
最佳答案
这听起来好像您在容器中有两个具有相同日志配置的应用程序(上下文)——它们将相互踩踏——几乎可以肯定。
这可以解释为什么您的日志滚动行为如此不稳定。
对此没有简单/容易的解决方法。您可以研究外部滚动机制,例如 logrotate(如果您在 unix 系统上托管)作为一个选项。
不过,您也许可以结合使用 logback+slf4j 来解决这个问题。 Slf4j 为插件重新路由库提供了一个插件来颠覆基于 log4j 的日志记录。我已经使用它在应用程序中用 logback+slf4j 替换 log4j,并设法确保依赖库(针对 log4j 编写)仍然正常运行。
此外,您可以利用 logback 的 context selector以确定什么/何时轮换日志文件。
如果不提供单独的应用程序部署,您的 log4j 配置将在两个应用程序之间发生冲突并导致您所看到的行为。
编辑 根据 OP 的问题/评论,以下内容应提供一种方法来完成基于上下文的选择。
关于您的情况,它是在两个上下文中部署的一个应用程序,请尝试从 server.xml 执行以下操作。它将为部署的上下文提供进入 JNDI 树的环境条目。
<Context docBase="application.war" path="/firstApplication" reloadable="true">
<Environment name="logback/context-name" value="firstApplication" type="java.lang.String" />
</Context>
<Context docBase="application.war" path="/secondApplication" reloadable="true">
<Environment name="logback/context-name" value="secondApplication" type="java.lang.String" />
</Context>
此时,您应该能够根据上下文选择器遵循文档。
关于java - Log4j 日志在错误的文件中滚动(在当天之前,跳过周末),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31514300/
我想要一个指标来显示迄今为止接口(interface)上的总传入字节数。 我能得到的最接近的方法是必须在查询中指定日期,但我希望有一些可以在当天工作而不改变任何东西的东西。 我现在在特定的一天所拥有的
有什么可能在编译时知道时间和日期 (BUILDTIME),以便以可移植的方式在二进制文件(可执行文件/库)中包含有关它们创建时刻的信息? 我们目前有一个使用 sh.exe 的解决方案,并且需要在 Wi
我是一名优秀的程序员,十分优秀!