Java 如何将主机名附加到log4j.xml中的日志文件
我想将主机名和日期附加到日志文件名中。因此日志文件名应该类似于app_hostname.date.log。 注意:这应该在linux和windows中运行。Java 如何将主机名附加到log4j.xml中的日志文件,java,logging,log4j,logfile,Java,Logging,Log4j,Logfile,我想将主机名和日期附加到日志文件名中。因此日志文件名应该类似于app_hostname.date.log。 注意:这应该在linux和windows中运行。 <appender name="applog" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="${path}/app.log" /> <param name="MaxFil
<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>
// 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");
以及如何根据日志模式添加过滤器,而不是像StringMatchFilter
。我希望模式匹配。
提前感谢Cf。对于类似的问题,即使根据此邮件列表,这是一个长期的请求,请求也不会明显满足
使用log4j的最新版本,本文档的结尾似乎已经有了使用properties提供的功能
无论如何,您始终可以通过专门的模式布局自行完成此操作,例如。您可以定义系统属性
主机名
并更改配置:
<param name="File" value="${path}/app_${hostname}.log" />
下面的配置就可以了
<appender name="file" class="org.apache.log4j.RollingFileAppender">
<param name="append" value="false" />
<param name="maxFileSize" value="10MB" />
<param name="maxBackupIndex" value="10" />
<param name="file" value="C:\\Users\\kavurira\\Desktop\\log4j-${HostName}.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m${HostName}%n" />
</layout>
</appender>
Just set "HostName" as system property, before initialization of Log4j.
System.setProperty("HostName", InetAddress.getLocalHost().getHostName());
在初始化Log4j之前,只需将“HostName”设置为系统属性。
System.setProperty(“主机名”,InetAddress.getLocalHost().getHostName());
编写您自己的自定义appender,扩展基本appender。这将帮助您操作java中的属性
看到这个答案了吗
或者简单地设置命令行参数&系统属性,如下所示
首先从java代码执行此操作,然后将log4j配置到应用程序中 注意:在执行代码时处理或捕获所需的异常。
<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>
// 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");
更新:
<logger name="packageName.AAA" additivity="false" >
<level value="INFO" />
<appender-ref ref="applog"/>
</logger>
如果您的应用程序是web应用程序,
然后需要在tomcat服务器
启动之后和任何应用程序
运行之前配置我们想要的属性
为此,创建一个类ApplicationConfiguration
,该类实现了ServletContextListener
接口,该接口有助于在任何应用程序运行之前首先运行
同样地
同样设置log4j.xml文件,
遵循log4j2,您可以进行环境变量查找,因此在类Unix系统中,这应该可以工作:
<Property name="MYHOST">${env:HOSTNAME}</Property>
<Appenders>
<File name="File1" fileName="${MYHOST}_file.log">
...
</File>
</Appenders>
${env:HOSTNAME}
.尝试以下操作:“${env:HOST}-${date:yyyy-MM-dd}”
主机名+日期。在yaml中
:
Properties:
Property:
- name: log-path
value: "logs"
- name: filePattern
value: "${env:HOST}-${date:yyyy-MM-dd}"
Appenders:
Console:
name: Console_Appender
target: SYSTEM_OUT
PatternLayout:
pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
File:
name: File_Appender
fileName: "${log-path}/filelog-${filePattern}.log"
我发现默认情况下只需
${hostName}
就可以用于最新的log4j
大概是这样的:
<File name="file" fileName="${baseDir}/${hostName}-file.log" append="true">
这记录在此处:
在默认属性部分中:
默认映射预先填充了“hostName”的值,即当前系统的主机名或IP地址
在哪里设置hostname属性,我没有任何servlet(启动时加载)…启动时不需要加载,必须登录或启动项目,对吗?在项目Logger=Logger.getLogger(“classname”)中执行以下行之前,必须在项目中设置属性我尝试过…但在我的例子中,日志文件是在应用程序启动时生成的..所以它不使用名称让我知道您使用的是哪个应用程序服务器?谢谢您的回答,但对我来说,主要问题是同一个包有两个日志,但如果它来自我的自定义类,它应该写入一个日志,如果它来自该类以外的其他类,它应该写入另一个。感谢您的回答,但对我来说,主要问题是同一个包有两个日志,但是如果它来自我的自定义类,它应该写入一个日志,如果它来自该类以外的类,它应该写入另一个日志。log4j将在应用程序启动时加载,那么如何通过system.SetProperty定义如何调用log4j,是否有基类?如果是这样,您可以设置属性thereLog4j在spring引导后正在初始化。信息:初始化spring根Web应用程序上下文log4j:Warn请考虑使用
logback
或log4j2
。使用logback的SiftingAppender
@Nati启动,请更具体。。如果可能,在应用程序启动时调用代码段log4j。@Sam您的应用程序是web应用程序?是的,它是web应用程序…tomcat是应用程序server@Sam参考我的“更新”section@Samonce类应用程序配置(我的建议)创建时无需为set hostname和currentDate设置上述两个步骤,因为它由ApplicationConfiguration-class本身处理。
<Property name="MYHOST">${env:HOSTNAME}</Property>
<Appenders>
<File name="File1" fileName="${MYHOST}_file.log">
...
</File>
</Appenders>
Properties:
Property:
- name: log-path
value: "logs"
- name: filePattern
value: "${env:HOST}-${date:yyyy-MM-dd}"
Appenders:
Console:
name: Console_Appender
target: SYSTEM_OUT
PatternLayout:
pattern: "[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"
File:
name: File_Appender
fileName: "${log-path}/filelog-${filePattern}.log"
<File name="file" fileName="${baseDir}/${hostName}-file.log" append="true">