java - 将输出重定向到滚动文件

标签 java linux bash log4j

关于如何将程序输出重定向到文件的例子有很多。
我需要设置文件的最大大小并滚动文件(消失旧消息)或备份旧文件并开始记录到新文件。

有没有办法使用操作系统核心的东西来做到这一点?

我的客户对我创建日志文件每个应用程序感到困惑,并在那里记录所有标准输出。
该应用程序是长期运行的应用程序,包含多个模块,这些模块在不同的 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/

相关文章:

java - 由于 OSX 中的其他线程,Platform.exit() 未结束 Javafx

java - 特定序列的递归方法

java - Java 中的构造函数用法

linux - 在 bash 中解决多维数组?

c++ - 如何编译gtest cpp文件?

linux - EC2 上的 SSH 连接问题

java - IntelliJ : automatically add current project-version to new class's comment

python - 如何将参数传递给部署脚本?

Android SH 外壳脚本

arrays - 在读取文件 bash 时将分割单词存储到数组中