关于如何将程序输出重定向到文件的例子有很多。
我需要设置文件的最大大小并滚动文件(消失旧消息)或备份旧文件并开始记录到新文件。
有没有办法使用操作系统核心的东西来做到这一点?
我的客户对我创建日志文件每个应用程序感到困惑,并在那里记录所有标准输出。
该应用程序是长期运行的应用程序,包含多个模块,这些模块在不同的 JVM 中启动(换句话说,这些是多个应用程序)并使用相同的 log4j.properties 文件。
我使用的是 java 和 log4j,但 log4j loggs per package 不是每个应用程序。它不适合我,因为两个模块可以有相同的包(记录器类别)但应该被定向到不同的文件。
应用程序模块使用 .sh 脚本启动。
谢谢
最佳答案
log4j 不以包为基础进行记录。您可以为其提供任何您喜欢的名称。
在您的 log4j.xml 中,添加以下内容:
<appender name="USERACTION" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="/var/logs/useraction.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d%m%n" />
</layout>
</appender>
<logger name="UserAction" additivity="false">
<level value="INFO" />
<appender-ref ref="USERACTION" />
</logger>
现在像这样实例化你的记录器:
private final static Logger LOG = Logger.getLogger("UserAction");
记录到此记录器的所有内容都将进入文件 useraction.log。您看到相关性了吗?
在当前类之后命名记录器只是为了方便,但绝不是强制性的。
我经常使用它来区分日志条目。我的一些类有多个记录器实例,例如一个用于用户操作,一个用于低级内容,一个用于服务调用等。
关于java - 将输出重定向到滚动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10334966/