log4j写入控制台但不写入文件(Liferay + Tomcat)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j写入控制台但不写入文件(Liferay + Tomcat)相关的知识,希望对你有一定的参考价值。
我最近遇到了Liferay / Tomcat日志从几个记录到相同文件的portlet堵塞的问题,这使得有时难以追踪问题。决定我想为每个portlet创建一个日志文件,以便更容易追踪问题,我发现了一些有用的文章,但无论我尝试什么,我都无法创建自定义日志文件(并通过扩展名)写给)。根据this article,我在liferay-plugin-package.properties中添加了以下行:
portal-dependency-jars=
log4j.jar,
log4j-extras.jar
我的log4j.xml看起来像这样:
<?xml version="1.0"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n" />
</layout>
</appender>
<appender name="FILE" class="org.apache.log4j.rolling.RollingFileAppender">
<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
<param name="FileNamePattern" value="../../logs/portrait-manager-portlet.%d{yyyy-MM-dd}.log" />
</rollingPolicy>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c{1}:%L] %m%n" />
</layout>
</appender>
<!-- test is a legitimate package name in my code -->
<category name="com.test" >
<priority value="DEBUG" />
</category>
<root>
<priority value="INFO" />
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</root>
</log4j:configuration>
最后,根据文章,以这种方式完成日志记录:
private static Logger log = Logger.getLogger(PortraitManagerServiceImpl.class);
log.info("testing log4j logging");
同样,如上所述,控制台日志记录工作正常,但永远不会创建日志文件,因此无法写入。如果有人对这种行为有任何建议或见解,我会非常感激,如果他们可以分享。
编辑:我在Liferay 6.2 b1和tomcat 7.0.40(包含在Liferay 6.2包中)
我正在使用log4j.properties
及其工作。尝试按属性文件
# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE
log4j.category.SimpleSign=DEBUG,FILE
# Define the file appender
log4j.appender.FILE=org.apache.log4j.DailyRollingFileAppender
# Set the name of the file
#log4j.appender.FILE.File=${file.name}/something.out
log4j.appender.FILE.File=${file.name}
# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true
# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug
# Set the append to false, should not overwrite
log4j.appender.FILE.Append=true
# Set the DatePattern
log4j.appender.FILE.DatePattern='-' dd-MM-yyyy
# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n
并通过调用动态设置文件路径
System.setProperty("file.name", FILE PATH);
如果目录路径=“../../ logs / portrait-manager;是一个有效的部署位置,请检查一下。很多时候,如果您的目录不够深,(例如C: webapps) ;这种相对路径变得无效。尝试使用具体路径和具体文件名,看看是否有效。然后你可以在文件名和相对文件路径中使用pattern。
此外,appender定义缺少阈值参数。尝试添加它,看看它是否有效。
编辑1:
示例配置:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
<!-- Dos core appenders -->
<appender name="serverConsoleAppender" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="DEBUG" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MM/dd HH:mm:ss} %5p [%-10t] %-10c{1} - %-70m%n" />
</layout>
</appender>
<appender name="serverDebugLogFileAppender" class="org.apache.log4j.RollingFileAppender">
<param name="Threshold" value="DEBUG" />
<param name="File" value="/apps/logs/dss_debug.log" />
<param name="MaxFileSize" value="20MB" />
<param name="MaxBackupIndex" value="40" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{MM/dd HH:mm:ss} %5p [%-10t] %-20c{1} - %-70m%n" />
</layout>
</appender>
<logger name="com.test" additivity="false">
<level value="DEBUG" />
<appender-ref ref="serverDebugLogFileAppender" />
<appender-ref ref="serverConsoleAppender" />
</logger>
</log4j:configuration>
在属性文件中添加阈值
log4j.appender.default.file.threshold=INFO,DEBUG
在java文件中
例如:记录器APPLICATION_LOGS = Logger.getLogger(“rootLogger”); APPLICATION_LOGS.debug( “启动”);或APPLICATION_LOGS.info(“开始”);作品。
以上是关于log4j写入控制台但不写入文件(Liferay + Tomcat)的主要内容,如果未能解决你的问题,请参考以下文章
subprocess.Popen communication()写入控制台,但不写入日志文件