首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在log4j.xml中将主机名附加到日志文件中

如何在log4j.xml中将主机名附加到日志文件中
EN

Stack Overflow用户
提问于 2016-03-23 06:10:14
回答 8查看 35.4K关注 0票数 13

我想将主机名和日期附加到日志文件中,name.So日志文件名应该与name.So类似。注意:应该同时在linux和windows.中运行。

代码语言:javascript
运行
复制
<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.I希望匹配的模式。提前感谢

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-03-28 09:28:10

首先从java代码执行此操作,然后将log4j配置到应用程序中,

注意:在下面代码执行时处理或捕获所需的异常.

代码语言:javascript
运行
复制
// 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运行之前配置我们希望在此配置的属性,

为此,创建一个类ApplicationConfiguration,它实现了ServletContextListener接口,这有助于在任何应用程序运行之前先运行。

也要这样做,

代码语言:javascript
运行
复制
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文件,

代码语言:javascript
运行
复制
<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文件,

代码语言:javascript
运行
复制
<web-app ...>
   <listener>
    <listener-class>
             com.pck1.ApplicationConfiguration
        </listener-class>
   </listener>
</web-app>

此配置需要应用于web.xml,因为应用程序在启动时,通过此配置,它将像上下文侦听器一样遵循它。

更新2 :

代码语言:javascript
运行
复制
<logger name="packageName.AAA" additivity="false" >
    <level value="INFO" />
    <appender-ref ref="applog"/>
 </logger>
票数 5
EN

Stack Overflow用户

发布于 2016-09-14 00:39:30

按照log4j2 文档,您可以进行环境变量查找,因此在类似Unix的系统中,应该可以这样做:

代码语言:javascript
运行
复制
<Property name="MYHOST">${env:HOSTNAME}</Property>
<Appenders>
  <File name="File1" fileName="${MYHOST}_file.log">
  ...
  </File>
</Appenders>

请注意,$HOSTNAME在默认情况下并不总是可用的,您可能需要在shell中显式地导出它,请参阅这个职位

票数 10
EN

Stack Overflow用户

发布于 2021-06-17 09:18:18

我发现默认情况下只有${hostName}才能适用于最新的log4j

就像这样:

代码语言:javascript
运行
复制
    <File name="file" fileName="${baseDir}/${hostName}-file.log" append="true">

这是在下面记录的:https://logging.apache.org/log4j/2.x/manual/configuration.html#AutomaticConfiguration

默认属性节中:

默认映射使用"hostName"的值预先填充,该值是当前系统的主机名或IP地址。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36170962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档