我正在尝试使用 log4j 生成日志。日志记录部分工作正常,但我想在文件名中包含要附加的主机名(生成日志的位置)。
例如:我当前的日志文件名:记录器.2019-06-12-06-14
我想要的: logger_$主机.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;
任何修复它的想法都将非常有帮助。(很抱歉,因为它是一个重复的问题,但我无法弄清楚早期帖子的问题:(
您可以使用 log4j2 中的${env:HOST}
选项进行环境查找.xml如文档中所述:https://logging.apache.org/log4j/2.0/manual/lookups.html#EnvironmentLookup
例如:
<RollingRandomAccessFile name="CustomLoggerRandomFile"
fileName="logs/${env:HOST}_system.log"
filePattern="${env:HOST}_system-%d{yyyy-MM-dd}-%i.log.gz"
immediateFlush="false">
编辑:我假设您正在使用log4j2,并且必须在主机(生成日志的位置)中创建$HOST变量作为环境变量。
我已经将${hostname}替换为${hostName}并且它起作用了。