【问题标题】:Log4j trim common category prefixLog4j 修剪常用类别前缀
【发布时间】:2011-03-25 23:46:50
【问题描述】:

我有一个使用 Apache Commons Logging 和 log4j 的项目,其中有大量类进行日志记录。我 95% 的日志以相同的前缀显示

log4j.appender.MyCompany.layout.ConversionPattern=[%d][%-5p][%c] %m%n

[2010-08-05 11:44:18,940][DEBUG][com.mycompany.projectname.config.XMLConfigSource] 从 [filepath] 加载配置 [2010-08-05 12:05:52,715][INFO][com.mycompany.projectname.management.ManagerCore] 日志条目 1 [2010-08-05 12:05:52,717][INFO][com.mycompany.projectname.management.ManagerCore] 日志条目 2

我知道使用 %c{1},我可以只显示类别的最后一部分(即类名),但是有没有办法从每个日志中删除公共部分 'com.mycompany.projectname'在那个包下,考虑一下每行占用多少空间?

【问题讨论】:

    标签: java log4j apache-commons-logging


    【解决方案1】:

    如果您使用的是 Log4j 1.2.16,您可以将布局更改为 EnhancedPatternLayout,这样您就可以为类别参数指定 值。来自文档:

    例如,对于类别名称“alpha.beta.gamma” ... %c{-2} 将删除两个元素 [从前面] 留下“gamma”

    这是一个更完整的例子:

    log4j.appender.C.layout=org.apache.log4j.EnhancedPatternLayout
    log4j.appender.C.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%t] [%c{-3}] %m%n
    

    在你的情况下应该砍掉com.mycompany.projectname

    但是,这将适用于记录的每条消息,即使它不是来自您的代码。换句话说,org.hibernate.engine.query.HQLQueryPlan 类别将被修剪为 query.HQLQueryPlan,这可能不是您想要的。

    如果您需要对此进行绝对控制(即,您想专门从每条消息中删除文本“com.mycompany.projectname”),那么您将需要实现自己的Layout 类。应该这样做:

    import org.apache.log4j.PatternLayout;
    import org.apache.log4j.spi.LoggingEvent;
    
    public class MyPatternLayout extends PatternLayout
    {
      @Override
      public String format(LoggingEvent event)
      {
        String msg = super.format(event);
        msg = msg.replace("com.mycompany.projectname", "");
    
        return msg;
      }
    }
    

    祝你好运!

    【讨论】:

    • 谢谢。这正是我想要的。
    【解决方案2】:

    使用 %c{2} 或 %C{2}。该数字指定要保留的最右侧组件的数量。

    请参阅http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html

    【讨论】:

    • 谢谢,但我想从左边修剪,因为如果有 com.mycompany.projectname.a.b.C,我希望它显示为 a.b.C。如果是 com.mycompany.projectname.d.E,我希望它显示为 d.E。使用 %c{2},我只会得到最右边的两个元素。
    • @sdeer 是的,它就是这么做的。如果您指定数字 2,则保留最右边的 2 个项目:d.E
    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 2011-03-18
    • 2013-05-05
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多