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

LOG4J1.2多级滤波

袁翰池
2023-03-14
   <root>
      <priority value="INFO"/>
      <appender-ref ref="CONSOLE"/>
      <appender-ref ref="server"/>
      <appender-ref ref="logfileForErrors"/>
   </root>
<appender name="logfileForAlarmsAndOther" class="org.apache.log4j.RollingFileAppender">
    <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
    <param name="file" value="${biomerieux.data}/simon/logs/vilink.log" />
    <param name="append" value="true" />
    <param name="threshold" value="INFO" />
    <param name="maxBackupIndex" value="1" />
</appender>
    <logger name="my.root.path.service.alert.AlertService" additivity="false">
        <level value="info" />
        <appender-ref ref="logfileForAlarmsAndOther"/>
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="server"/>
    </logger>

因此,我成功地在所有列出的日志中获得了警报日志(由于根已经在INFO中,所以大量的工作都是徒劳的)。但我真正想要的是,现在只在我的新appender上获得来自某个特定类的信息。

我不确定我已经很好地描述了这一点,而且我不了解log4j,所以如果需要,请要求澄清。这个难题与限制我的新appender警告和更大有关,除了我还想要一个特定类的Info。这个类的这些信息也应该发送到父记录器通常记录信息的每个appender。我可能会感到困惑,但似乎自定义过滤器是我所能想到的在log4j1.2中工作的全部内容。

共有1个答案

云浩然
2023-03-14

我解决这个问题的方法是消除特定类的额外子记录器,而是在appender中处理一系列过滤器:

<appender name="logfileForAlarmsAndOther" class="org.apache.log4j.RollingFileAppender">
    <errorHandler class="org.apache.log4j.helpers.OnlyOnceErrorHandler"/>
    <param name="file" value="${biomerieux.data}/simon/logs/vilink.log" />
    <param name="append" value="true" />
    <param name="threshold" value="INFO" />
    <param name="maxBackupIndex" value="1" />
    <filter class="org.apache.log4j.varia.StringMatchFilter">
        <param name="StringToMatch" value="MyStringToMatch" />
        <param name="AcceptOnMatch" value="true" />
    </filter>
    <filter class="org.apache.log4j.varia.LevelRangeFilter">
        <param name="LevelMin" value="WARN" />
    </filter>
</appender>

因此,全局阈值是INFO,它立即接受与字符串匹配的INFO,但任何其他内容都要服从第二个过滤器,该过滤器将剩余消息限制在警告或以上。

这样做的缺点是,我必须在日志消息中引入一个唯一的可搜索字符串。

 类似资料:
  • 我正在将我的应用程序从Log4J1.2迁移到Log4J2-2.8.1版本。下面是log4j.properties文件中现有的1.x配置。

  • el-menu实现无线多层级的菜单数据过滤,菜单显示与不显示是后台可配置的,根据一个定义好的状态字段来显示,status为0不显示,反之显示。 LeftMenuTree.vue组件: 组件中使用: 后端返回的数据结构如下: 这个时候就需要根据menuStatus状态值来显示,于是写了一个方法: 但是过滤的不彻底,层级太多,就过滤不了,即使过滤了也还会显示菜单下拉项箭头。 求教大家对于层级太多的菜单

  • 主要内容:检测一个数字是否在一个范围内,实例,检测 IPv6 地址,实例,检测 URL - 必须包含QUERY_STRING(查询字符串),实例,移除 ASCII 值大于 127 的字符,实例,PHP 过滤器参考手册检测一个数字是否在一个范围内 以下实例使用了 filter_var() 函数来检测一个 INT 型的变量是否在 1 到 200 内: 实例 <?php $int = 122; $min = 1; $max = 200; if (filter_var($int, FILTER_VALI

  • 操作符(operator) 用来改变WHERE子句中的子句关键字,也成逻辑操作符。 AND操作符 通过使用AND来给WHERE子句附加条件。 索引出供应商'DLL01'制造且价格小于等于4美金的所有产品名称和价格。 mysql> SELECT prod_id, prod_price, prod_name -> FROM Products -> WHERE vend_id = 'D

  • 问题内容: 我有一个下面的收藏 我想到3个嵌套级别…我只希望第3个数组中的元素以及第2个和第一个数组中的元素 我想要这个输出 同时,我想用做和只有…不想使用此 问题答案: 基本上,您必须使用每个级别来应用您的条件,并且必须使用内部嵌套数组的每个数组。那是因为您想将过滤后的数组传递给输出。因此将有过滤器和地图。在这种情况下,缩进可能确实有用。尝试: mongoplayground

  • 我有个问题。在常见的购物车网站有功能搜索产品与多个过滤器。例如,我正在搜索运动装备与一些过滤器,如: > 制造商 [x]耐克 阿迪达斯 茵宝 选项 尺寸 [x]s [x]M L [x]白色 黄色 红色 [x]蓝色 这是我的地图 部分测试数据 有了这个查询,一切都很好 但是,如果我在选项过滤器中添加更多的条件,我没有得到结果 我不知道我在映射或查询中是否错了,或者您能告诉我在这种情况下创建映射的最佳