代码之家  ›  专栏  ›  技术社区  ›  Mario Marinato

log4j日志文件上的插件版本

  •  1
  • Mario Marinato  · 技术社区  · 15 年前

    我正在开发一个RCP应用程序,并使用log4j生成日志。每当记录异常时,我希望在日志文件中包含一行以标识应用程序版本。

    我可以在log4j.properties文件的log4j.appender.file.layout.conversionPattern行上强制执行此操作,只需将其写下来,但每次更改版本号时都必须记住对它进行更改,这对我的神经来说太容易出错了。

    在log4j.properties文件中或通过编程,是否有一种方法可以做到这一点,即当我更改应用程序版本号时,记录的值会发生更改?

    谢谢您。

    2 回复  |  直到 15 年前
        1
  •  3
  •   Francis Upton IV    15 年前

    听起来您希望能够通过编程配置log4j。可以使用log4j propertyconfigurator.configure()方法提供包含日志记录属性的属性对象。在转换模式中,您可以将版本号指定为常量。另外,我建议您从定义应用程序的主插件(包)中获取版本号,这样您就可以使用普通的Eclipse版本控制工具来定义它。您可以使用如下代码:

    public String getVersion()
    {
        Bundle bundle = Platform.getBundle("com.yourcompany.yourproject.pluginid");
        Dictionary headers = bundle.getHeaders();
        return (String)headers.get("Bundle-Version"); //$NON-NLS-1$
    }
    
        2
  •  0
  •   VonC    15 年前

    您可以要求应用程序从 plugin.properties 甚至一个 custom my.properties 文件,类似于 this thread :

    public class MyPlugin extends AbstractUIPlugin {
    
      protected final static String MY_PROPERTIES = "my.properties";    
      protected PropertyResourceBundle myProperties;
    
      public PropertyResourceBundle getMyProperties(){
    
      if (myProperties == null){
        try {
          myProperties = new PropertyResourceBundle(
            FileLocator.openStream(this.getBundle(),
              new Path(MY_PROPERTIES),false));
        } catch (IOException e) {
          this.logError(e.getMessage());
        }
      return myProperties;
      }
    ...
    

    然后从代码中调用:

    MyPlugin.getInstance().getMyProperties().getString("foo");
    

    然后,可以在会话期间将其存储在静态变量中,并在log4j输出中重用。