我正在将服务器上的记录器配置为每天压缩日志。我还需要确保单个日志文件不会太大(例如每个文件10MB)。
两者都没有,但是首先我想解决文件大小的问题。
这是我的log4j.properties文件:
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
我们使用log4j 1.2.17,现在我添加了相同版本的log4j Extras。
当我测试日志记录时,它将创建任意大文件。我尝试用maxFileFileSize和MaxFileSize代替maxFileSize,用“ 10MB”代替数字,但是没有用。
我也尝试通过编程方式设置属性,尽管这会使事情变得困难,因为我们有许多使用记录器的类。
但是这也不起作用。事实证明,我的Logger实例(?)中没有Appender。这是我的代码:
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);
}
输出为空Enumeration:
org.apache.log4j.helpers.NullEnumeration@1161fded
我没有找到其他对我的问题有用的帖子。有什么想法吗?
答案 0 :(得分:0)
@GregT
如您所知,log4j具有三个主要结构-Appender,优先级(记录器)和模式布局。默认情况下,当我们实例化log4j(例如Logger log = Logger.getInstance(Somclass.class)
->时,会设置root Logger,它会增加rootlogger的可加性(意味着默认情况下,此子logger继承rootlogger中设置的优先级和级别)。现在,您可以选择在lo4j配置中定义自己的优先级和级别(在xml或属性文件中)。
这是我为此配置的内容。消除了触发策略和动态命名,这是使用.properties文件的示例配置
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级别,它也只会在“ log”实例中打印出符合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>
希望这可以回答您的问题。