Log4j:将生成的日志文件名设置为包含主机名

时间:2019-06-12 07:27:12

标签: java-8 log4j

我正在尝试使用log4j生成日志。日志记录部分工作正常,但我想将主机名(生成日志的地方)包括在文​​件名中。

例如:我当前的日志文件名:logger.2019-06-12-06-14

我想要的是:logger_ $ HOST.2019-06-12-06-14 ,其中$ HOST是主机名

我已经在stackoverflow中看到了其他帖子,并且取决于我是否在Java代码中设置了主机名,我认为在调用log4j之前已设置了主机名

    static {
        try {
            HOST_NAME = InetAddress.getLocalHost().getCanonicalHostName();
        } catch (UnknownHostException e) {
            HOST_NAME = "localhost";
        }
        System.setProperty("hostname", HOST_NAME);
    }

,并修改了cfg文件(我们为所有记录器定义了属性),以包括系统属性:

    *.*.log4j.appender.MyLogger.File=/logs/logger_$hostname;

但是生成的结果文件名是logger_ $ hostname.2019-06-12-06-14(实际上是$ hostname而不是属性值)

在帖子中,确实提到了在cfg文件中分配变量的方法是 logger _ $ {hostname} ,但在编译时会出现意外的 { ,所以我只输入了 $ hostname

我也尝试了其他方法,例如放置

    *.*.log4j.appender.MyLogger.File=/logs/logger_$env:hostname;

    *.*.log4j.appender.MyLogger.File=$hostname;

    *.*.log4j.appender.MyLogger.File=/logs/logger_$HOST;
 (thinking since its running in unix, it might pick the HOST variable :( )

但是到目前为止还没有运气。有什么想法我可能做错了吗?

顺便说一句,我正在通过此方式呼叫记录器:

    private static Logger logger = Logger.getLogger("MyLogger");

因此,是否可以从我正在登录的类中设置主机名。我确实想每分钟轮换一次日志,所以不想弄乱其他log4j设置。我完整的log4j附加程序属性:

    *.*.log4j.logger.myLogger=(INFO,MyLogger);
    *.*.log4j.additivity.myLogger=false; # this logger does not show up in main logs
    *.*.log4j.appender.MyLogger.File=/logs/logger_$hostname;
    *.*.log4j.appender.MyLogger.layout=org.apache.log4j.PatternLayout;
    # %n: new line for each entry
    *.*.log4j.appender.MyLogger.layout.ConversionPattern="%m%n";
    *.*.log4j.appender.MyLogger.Append=true;
    *.*.log4j.appender.MyLogger.ImmediateFlush=true;
    *.*.log4j.appender.MyLogger.Encoding=UTF8;

    # Enable 1 minute rotation
    *.*.log4j.appender.MyLogger.DatePattern="'.'yyyy-MM-dd-HH-mm";
    # Disable periodic flush since files will be flushed upon rotation that happens every minute
    *.*.log4j.appender.MyLogger.PeriodicFlush=false;

任何解决它的想法都会很有帮助。 (并道歉,因为这是一个重复的问题,但我无法通过之前的帖子弄清楚这个问题:()

2 个答案:

答案 0 :(得分:0)

您可以使用log4j2.xml中的.pyc选项进行环境查找,如文档所述:https://logging.apache.org/log4j/2.0/manual/lookups.html#EnvironmentLookup

例如:

${env:HOST}

编辑:我假设您使用的是log4j2,并且必须在主机(生成日志的主机)中将$ HOST变量创建为环境变量。

答案 1 :(得分:0)

我已经用 ${hostName} 替换了 ${hostname} 并且它起作用了。