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

如何根据maven项目的日志级别过滤码头日志?

程皓轩
2023-03-14

登录jetty时遇到问题。我在文件中写日志。在生成的日志文件中,应用程序的日志级别是info,但我将其设置为WARN。我有个想法,jetty不用过滤就可以从应用程序中写入日志,是吗?

>

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。属性

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}/资源/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 ...

共有1个答案

朱海超
2023-03-14

忽略etc/jetty日志记录。xml,您的安装程序没有使用它(您下载了一个没有引用它的自定义模块/logging.mod

通过运行start,您可以看到您的配置正在使用什么。jar——列表配置

该XML的存在只是为了支持只写入系统的内置strlog实现。err(又名STDERR)。etc/码头日志记录。xml只需获取STDERR和STDOUT并将其写入磁盘。

由于您正在使用log4j,因此不需要整个重定向步骤(如果使用该步骤,将与正常的log4j控制台附加程序行为冲突)。

你的${jetty.base}/resources/jetty日志。属性只能是:

org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog

它不应该包含其他行。

文件${jetty.base}/resources/log4j。属性是配置初始命名记录器级别以及所有要使用的初始附加器的地方。

您当前已将初始级别设置为WARN。

当服务器启动时,您拥有的任何代码都可以(在运行时)决定更改特定命名记录器的级别,甚至可以在运行时添加/删除appender(这比您预期的更常见)

因为你没有为你的appender声明一个阈值,所以它会把所有看到的级别都添加进去。

如果您不想在附加程序中看到该DEBUG,只需将以下行添加到${jetty.base}/资源/log4j.properties

log4j.appender.file.Threshold=WARN

但您可能仍然想知道在属性文件之外设置命名记录器级别的是什么。(检查代码)

 类似资料:
  • 问题内容: 我的服务器的CPU使用率异常高,我可以看到Apache使用了太多的内存。我有一种感觉,我被一个IP所包围-也许您可以帮助我找到他? 我使用以下行来查找10个最“活跃”的IP: 前5个IP对服务器的请求大约是“平均”用户的200倍。但是,我无法确定这5位访问者是否只是非常频繁的访问者,或者他们正在攻击服务器。 有没有办法将上述搜索指定到一个时间间隔,例如 最近两个小时还是今天的10到12

  • 我正在尝试创建基于不同级别的“不同”附加器,但到目前为止,我找不到一种隔离日志级别的方法。。。。 我需要一种方法,能够土地只有INFO优先排序的日志被追加。因为INFO级别的日志记录也会显示DEBUG标记的日志记录器...这对我没有帮助。 另一件事是,对于“相同”包,我无法定义不同的日志附加器: 在这里,我得到了如下错误:

  • 在我的Java应用程序中,我使用SLF4J+Logback进行日志记录。我在开发环境中使用调试级日志记录,在生产环境中使用错误级日志记录。但是有一些消息我无论如何都想要记录下来,无论日志级别如何(类似于,但使用的是logger)。 有什么切实可行的方法可以实现这一点吗?我可以使用error或更低的级别,但我想做的是给出一些信息,所以在语义上是错误的,它不是错误。 我可以在我的中为我的类定义另一个记

  • 我的MBean部署在JBoss上。jboss日志记录级别设置为'info'。现在,当我将我的包的日志级别(java util logger)更改为“fine”(通过设置日志级别以编程方式运行时)时,它不会追加任何logger.fine(“....”)的消息。信息被过滤掉了。 是否有任何方法可以将java util记录器日志级别的更改传播到jboss日志级别?(java util有不同的级别->SE

  • 主要内容:如何设置日志级别?,日志级别如何工作?,Log4j 日志级别示例日志级别用于对日志文件中的信息进行分类。但是它们以非常具体的方式进行分类,即按紧急程度分类。该级别允许您管理以下类型的信息: 您可以在搜索过程中过滤您的日志文件。 您可以管理您记录的信息量。 系统中给出的信息量和类型以及事件日志由配置文件中的 log4j 日志级别设置控制。每条日志消息都以消息级别为前缀。 日志级别是org.apache.log4j.Level类的一个实例。 Log4j 具有以下级

  • 我想更改quarkus应用程序的日志级别,在我可以找到任何引用的地方,它都指向application.properties文件。 我需要任何额外的扩展来让它工作吗? 我读过这个问题,但对我不起作用。我真的不知道,我从Quarkus bootstrap创建了一个简单的应用程序,但我仍然有同样的行为。