我在登录码头时遇到问题。我写日志文件。在生成的日志文件中,应用程序的日志记录级别是info,但是我将其设置为WARN。我知道jetty从应用程序写入日志而不进行过滤,是这样吗?
我使用maven并使用命令
打包我的应用程序sudo mvn package
为jetty设置日志记录:
{jetty.base}/modules$ sudo curl -O https://raw.githubusercontent.com/jetty-project/logging-modules/master/log4j-1.2/logging.mod
{jetty.base}$ sudo java -jar /opt/jetty/start.jar --add-to-start=logging
档案{jetty.base} /resources/jetty-logging.properties
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
org.apache.log4j.LogManager.getLogger("org.eclipse.jetty").setLevel(Level.WARN);
org.eclipse.jetty.LEVEL=WARN
文件{jetty.base} /resources/log4j.properties
log4j.rootLogger=WARN, file
log4j.appender.file=org.apache.log4j.RollingFileAppender
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
文件{jetty.base} /etc/jetty-logging.xml
<New id="ServerLog" class="java.io.PrintStream">
<Arg>
<New class="org.eclipse.jetty.util.RolloverFileOutputStream">
<Arg><Property name="jetty.logs" default="/mnt/logs"/>/yyyy_mm_dd.stderrout.log</Arg>
<Arg type="boolean">false</Arg>
<Arg type="int">90</Arg>
<Arg><Call class="java.util.TimeZone" name="getTimeZone"><Arg>GMT</Arg></Call></Arg>
<Get id="ServerLogName" name="datedFilename"/>
</New>
</Arg>
</New>
<Get name="rootLogger">
<Call name="info"><Arg>Redirecting stderr/stdout to file <Ref refid="ServerLogName"/></Arg></Call>
</Get>
<Call class="java.lang.System" name="setErr"><Arg><Ref refid="ServerLog"/></Arg></Call>
<Call class="java.lang.System" name="setOut"><Arg><Ref refid="ServerLog"/></Arg></Call>
在日志文件中,我看到使用级别信息和调试
进行日志记录07:13:10.072 [main] INFO
07:14:04.216 [java-sdk-http-connection-reaper] DEBUG o.a.h.i.c.PoolingClientConnectionManager ...
答案 0 :(得分:1)
忽略etc/jetty-logging.xml
,您的设置没有使用它(您下载了一个不引用它的自定义modules/logging.mod
)
您可以通过运行
来查看配置的使用情况start.jar --list-config
仅存在XML以支持仅写入StdErrLog
(也称为STDERR)的内置System.err
实现。 etc/jetty-logging.xml
只需要STDERR和STDOUT并将其写入磁盘。
由于您使用的是log4j
,因此不需要整个重定向步骤(如果使用了,则会与正常的log4j控制台appender行为发生冲突)。
您的${jetty.base}/resources/jetty-logging.properties
应该只是:
org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
它不应包含任何其他行。
文件${jetty.base}/resources/log4j.properties
是您配置初始命名记录器级别以及要使用的所有初始追加者的位置。
您目前的初始级别设置为WARN。
当您的服务器启动时,您拥有的任何代码都可以(在运行时)决定更改特定命名记录器的级别,甚至在运行时添加/删除appender(这比您预期的更常见)< / p>
由于您没有为您的appender声明Threshold
,因此会看到所有级别并附加它们。
如果您不想在您的修补程序中看到DEBUG,只需将以下行添加到${jetty.base}/resources/log4j.properties
log4j.appender.file.Threshold=WARN
但是您可能仍然想知道在属性文件之外设置命名记录器级别的内容。 (检查你的代码)