当前位置: 首页 > 知识库问答 >
问题:

log4j 1.2中的最大日志文件大小。17.有财产

红弘盛
2023-03-14

我正在配置服务器上的记录器,以便每天压缩日志。我还需要确保单个日志文件不会变得太大(比如每个文件10MB)。

这两种方法都不起作用,但首先我想解决文件大小的问题。

这是我的log4j。属性文件:

log4j.rootLogger=DEBUG, file

log4j.appender.file=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.file.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.rollingPolicy.fileNamePattern=./log/logging.%d.log.zip
log4j.appender.file.TriggeringPolicy=org.apache.log4j.rolling.SizeBasedTriggeringPolicy
log4j.appender.file.TriggeringPolicy.maxFileSize=1000000
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

我们使用log4j1.2。17,现在我添加了同一版本的log4j额外功能。

当我测试日志记录时,它会创建任意大文件。我试着用maximumFileSize和MaxFileSize代替MaxFileSize,用“10MB”代替数字,但没有任何效果。

我还尝试以编程方式设置属性,尽管这会使事情变得困难,因为我们有很多使用记录器的类。

但这也不起作用。事实证明,我的记录器实例(?)中没有追加器。这是我的密码:

logger = Logger.getLogger(LogTest.class);
//        RollingFileAppender app = (RollingFileAppender) logger.getAppender("file");
//        app.setMaxFileSize("1000000");
Enumeration allAppenders = logger.getAllAppenders();
System.out.println(allAppenders);
for (Enumeration<Object> iter = allAppenders; iter.hasMoreElements();) {
    Object elem = iter.nextElement();
    System.out.println(elem);
}

输出为空枚举:

org.apache.log4j.helpers.NullEnumeration@1161fded

我没有找到另一个对我的问题有用的帖子。有什么想法吗?

共有1个答案

程鸿波
2023-03-14

@GregT正如您所知,log4j有三个主要的构造—附加器、优先级(记录器)和模式布局。默认情况下,在实例化log4j时设置根记录器,例如Logger log=Logger。getInstance(Somclass.class)-

下面是我为相同的配置。消除了触发策略和动态命名,下面是使用的示例配置。属性文件

log4j.threshold = INFO
#Specify the appender and the priority
log4j.rootLogger = DEBUG, Appender1, Appender2

log4j.appender.Appender1 = org.apache.log4j.ConsoleAppender

log4j.appender.Appender2 = org.apache.log4j.RollingFileAppender
log4j.appender.Appender2.File = app/log1.log

log4j.appender.Appender1.layout = org.apache.log4j.PatternLayout
log4j.appender.Appender2.layout = org.apache.log4j.PatternLayout

# Print the date in ISO 8601 format
log4j.appender.Appender1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n
log4j.appender.Appender2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

注意:在这里,如果您将阈值设置为INFO,即使优先级设置为DEBUG级别,它也只是在“日志”实例中打印符合INFO级别的语句。

注:我们也可以为不同的模块设置不同的日志

log4j.rootLogger=DEBUG

# AdminFileAppender - used to log messages in the admin.log file.
log4j.appender.AdminFileAppender=org.apache.log4j.FileAppender
log4j.appender.AdminFileAppender.File=app/admin.log
log4j.appender.AdminFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.AdminFileAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

# ReportFileAppender - used to log messages in the report.log file.
log4j.appender.ReportFileAppender=org.apache.log4j.FileAppender
log4j.appender.ReportFileAppender.File=app/report.log
log4j.appender.ReportFileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ReportFileAppender.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n

**log4j.logger.com.vaannila.admin=,AdminFileAppender 
log4j.logger.com.vaannila.report=,ReportFileAppender** 

如果您想在达到配置的阈值大小时推出新文件,您可以使用RollingFileAppender。这里管理模块日志写入"admin.log"文件,报告模块写入"report.log"文件

希望这有帮助

编辑:我担心基于时间/基于大小的触发策略工作得很好,并且只适用于xml配置,而不适用于属性文件配置。请检查一下。而且,您不必包含apache-log4j-extras依赖项。1.2.17随附。下面是我使用的基于XML的配置

 <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>

        <RollingFile name="info" filepattern="apps/logs/${hostName}-info-%i.log"
            filename="apps/logs/${hostName}-info.log">

            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %X{userName} [%C] %F:%L - %m%n" />
            <Policies>

                <SizeBasedTriggeringPolicy size="20 MB" />

            </Policies>

            <DefaultRolloverStrategy max="1" min="1" />

        </RollingFile>
        <RollingFile name="debug" filepattern="apps/logs/${hostName}-debug-%i.log"
            filename="apps/logs/${hostName}-debug.log">

            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %X{userName} [%C] %F:%L - %m%n" />
            <Policies>

                <SizeBasedTriggeringPolicy size="20 MB" />

            </Policies>

            <DefaultRolloverStrategy max="1" min="1" />

        </RollingFile>
        <Routing name="RoutingAppender">
            <Routes pattern="${ctx:logFileName}">
                <Route>
                    <RollingFile name="${ctx:logFileName}-logfile"
                        fileName="apps/logs/${hostName}-${ctx:logFileName}.log"
                        filePattern="apps/logs/${hostName}-${ctx:logFileName}-%i.log">
                        <PatternLayout>
                            <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS}[%X{logTrackingId}] [%t] %c{1} - %msg%n
                            </pattern>
                        </PatternLayout>
                        <Policies>
                            <SizeBasedTriggeringPolicy size="20 MB" />
                        </Policies>
                        <DefaultRolloverStrategy max="1" min="1" />
                    </RollingFile>
                </Route>
            </Routes>
        </Routing>

        <RollingFile name="RollingFileMonitor" filepattern="apps/logs/${hostName}-monitor-%i.log"
            filename="apps/logs/${hostName}-monitor.log">

            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %X{userName} [%C] %F:%L - %m%n" />
            <Policies>
                <SizeBasedTriggeringPolicy size="20 MB" />
            </Policies>

        </RollingFile>

        <RollingFile name="RollingFileAPM" filename="apps/logs/${hostName}-apm.log"
            filepattern="apps/logs/${hostName}-apm-%i.log">
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] %X{userName} [%C] %F:%L - %m%n" />
            <Policies>
                <SizeBasedTriggeringPolicy size="20 MB" />
            </Policies>
            <DefaultRolloverStrategy min="1" max="1" />
        </RollingFile>
    </Appenders>


    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
        <Logger name="com.XXXX.app.service" additivity="false">
            <AppenderRef ref="RollingFileMonitor" />
        </Logger>
        <Logger name="com.XXXX.apm" additivity="false">
            <AppenderRef ref="RollingFileAPM" />
        </Logger>

        <Logger name="com.XXXX,config" level="info" additivity="false">
            <AppenderRef ref="info" />
        </Logger>

        <Logger name="com.XXXXXX.controller" level="info" additivity="false">
            <AppenderRef ref="RoutingAppender" />
        </Logger>
        <Logger name="com.XXXXX.impl" level="info" additivity="false">
            <AppenderRef ref="RoutingAppender" />
        </Logger>
        <Logger name="com.XXXXX.impl" level="info" additivity="false">
            <AppenderRef ref="RoutingAppender" />
        </Logger>
        <Logger name="com.XXXX.logging" level="info" additivity="false">
            <AppenderRef ref="RoutingAppender" />
        </Logger>
        <Logger name="com.zaxxer.hikari" level="debug" additivity="false">
            <AppenderRef ref="debug" />
        </Logger>
    </Loggers>

希望这能回答你的问题。

 类似资料:
  • 问题内容: 我们使用logrotate并每天运行一次…现在,在某些情况下,日志已经显着增长(请参阅:gigbaytes)并杀死了我们的服务器。所以现在我们想为日志设置最大文件大小。 我可以将其添加到logrotate.conf吗? 大小50M 它将适用于所有日志文件吗?还是我需要在每个日志的基础上进行设置? 或其他建议? (ps。我知道,如果您想收到通知,日志会像所描述的那样增长,而我们想要做的事

  • 我正在使用PyCharm社区版2016,我注意到我无法打开大型数据输入文件或日志(20MB)。编辑简单地说“文件XXX太大(大小)”。 不仅如此,似乎没有办法改变限制。官方文档提到了一种增加使用intellisense的最大大小的方法,但根本没有增加可以打开的文件的最大大小。这是真的吗?这真的是一个完全无法打开大型日志的IDE吗?

  • 问题内容: 我正在使用Windows 7和python 2.7。我想将日志文件大小限制为5MB。我的应用程序启动后会写入日志文件,然后该应用程序终止。当我的应用再次启动时,它将写入同一日志文件。因此应用无法持续运行。应用程序启动,处理和终止。 我的记录代码是: 我尝试过 RotatingFileHandler, 但是没有用 那么,如何在python中实施文件大小限制? 问题答案: 丢失并使用Rot

  • 问题内容: 我想知道哪个是Javascript 对象允许的最小和最大日期。我发现最小日期大约是200000 BC,但是我没有得到任何参考。 有人知道答案吗?我只是希望它不依赖于浏览器。 最好以“纪元时间”(= 1970-01-01 00:00:00 UTC + 00的毫秒数)回答。 问题答案: 根据规范§15.9.1.1: Date对象包含一个数字,该数字指示毫秒内的特定时间点。这样的数字称为时间

  • 问题内容: 我正在使用JVM标志运行Java进程,并看到以下输出: 有没有办法解决这个问题? 问题答案: 当无法满足Java堆的分配或永久生成时,命令行选项告诉HotSpot VM生成堆转储。使用此选项运行不会产生任何开销,因此对于OutOfMemoryError需要很长时间才能浮出水面的生产系统很有用。 为了解决您面临的特定问题,可以使用以下纠正措施之一: 措施1: XX:HeapDumpSeg

  • 问题内容: 我有一个无法访问的PC上托管的网站。我有一个上传表单,允许人们上传最大30MB的mp3文件。我的服务器端脚本是用PHP完成的。 每次尝试上传文件时,都会收到一条错误消息,声称文件超出了允许的最大大小,因此我需要增加大小。我在网络上的研究建议更改我无权访问的文件,这样将无法正常工作。其他人建议我将自定义文件添加到我的根目录中,该文件无效。还有其他建议吗? 问题答案: 您需要设置的值,并在