我想在日志文件名后附加主机名和日期,因此日志文件名应类似于 app_hostname.date.log 。 注意: 这应该同时在
linux和Windows中 运行 。
<appender name="applog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${path}/app.log" />
<param name="MaxFileSize" value="1MB" />
<param name="DatePattern" value=".dd-MM-yyyy" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd-MM-yyyy HH:mm:ss}] [%-5p] %m%n"/>
</layout>
</appender>
以及如何基于日志模式而不是作为添加过滤器StringMatchFilter
。我希望模式匹配。提前致谢
首先从您的Java代码执行此操作, 然后 将log4j配置 到应用程序中,
注意:在执行以下代码时,处理或捕获所需的异常。
// step-1 : set hostName into System's property, which will use by log4j
System.setProperty("hostName", InetAddress.getLocalHost().getHostName());
//step - 2 : set currentDate into System's property, which will use by log4j
System.setProperty("currentDate", new SimpleDateFormat("dd-MMM-yyyy").format(new Date()));
//step - 3 : now configure/load log4j into Application , if it's not still loaded earlier then.
org.apache.log4j.Logger LOG = Logger.getLogger(YourJavaClassName.class); // ALERT : before this step above 2-step must needs to be execute, otherwise file-name won't appear as you required.
//LOG.debug("anything whatever programmer what to log");
更新 :
如果您的应用程序是Web应用程序,则需要在tomcat-server
启动后和application
运行之前html" target="_blank">配置我们想要的属性,
为此,创建一个实现了接口的类ApplicationConfiguration
,该类ServletContextListener
有助于在任何应用程序运行之前先运行。
照样做
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ApplicationConfiguration implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
try {
// step-1 : set hostName into System's property, which will use by log4j
System.setProperty("hostName", InetAddress.getLocalHost().getHostName());
//step - 2 : set currentDate into System's property, which will use by log4j
System.setProperty("currentDate", new SimpleDateFormat("dd-MMM-yyyy").format(new Date()));
} catch (UnknownHostException e) {
System.out.println("Error Message : " + e.getMessage());
//e.printStackTrace();
}
}
}
......
同样设置您的log4j.xml文件,
<appender name="applog" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${path}/app_${hostName}.${currentDate}.log" />
<param name="MaxFileSize" value="1MB" />
<param name="DatePattern" value=".dd-MM-yyyy" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd-MM-yyyy HH:mm:ss}] [%-5p] %m%n"/>
</layout>
</appender>
请相应地更新web.xml文件,
<web-app ...>
<listener>
<listener-class>
com.pck1.ApplicationConfiguration
</listener-class>
</listener>
</web-app>
web.xml
之所以需要应用此配置,是因为应用程序启动时会像Context-listener一样遵循它。
更新2:
<logger name="packageName.AAA" additivity="false" >
<level value="INFO" />
<appender-ref ref="applog"/>
</logger>
我的WAR正在使用一个log4j FileAppender,该文件是通过WAR中的目录下的文件配置的。 我已将log4j追加器配置为: 通过此配置,我将尝试实现以下功能: 将记录调试级别和更高级别的所有日志消息(因此所有) 我希望文件位于Tomcat的目录下 这种配置是否实现了这些项,如果没有,需要更改什么?
我需要分析来自多个主机的nginx日志文件。 首先,我想将它们复制到主机目录。例如,我希望将nginx错误日志文件从6台主机复制到目标主机目录。 问题是我不能知道如何使用源ip地址命名dest文件?
问题内容: 在Linux中将文本附加到文件的最简单方法是什么? 我看了这个问题,但是可接受的答案使用了一个附加程序(),我相信应该有一个更简单的方法或类似方法。 问题答案: cat >> filename This is text, perhaps pasted in from some other source. Or else entered at the keyboard, doesn’t
问题内容: 我需要创建一个临时文件,因此尝试了以下操作: 输出是这样的: 现在,我不希望将多余的数字(长整数)添加到文件名中。我该如何实现?谢谢 问题答案: 首先,使用以下代码段获取系统的临时目录: 然后,将变量与数组一起使用以分别创建每个文件。
问题内容: 我该怎么做才能将其附加到文件中而不是覆盖? 问题答案: 使用附加:
我目前正在使用log4j2为我的web应用程序编写日志。我已经配置了一个滚动文件追加器,可以在每晚午夜滚动。 我的log4j2.xml如下: 目前,这会写入名为application.log的日志,然后在午夜将当前的application.log文件复制到application yyy-MM-DD . log(文件名中的日期会被正确替换),并在第二天继续在application.log中记录日志。