我正在尝试使用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;
任何解决它的想法都会很有帮助。 (并道歉,因为这是一个重复的问题,但我无法通过之前的帖子弄清楚这个问题:()
答案 0 :(得分:0)
您可以使用log4j2.xml中的.pyc
选项进行环境查找,如文档所述:https://logging.apache.org/log4j/2.0/manual/lookups.html#EnvironmentLookup
例如:
${env:HOST}
编辑:我假设您使用的是log4j2,并且必须在主机(生成日志的主机)中将$ HOST变量创建为环境变量。
答案 1 :(得分:0)
我已经用 ${hostName} 替换了 ${hostname} 并且它起作用了。