log4j根据谁登录到linux创建动态文件名

时间:2015-07-30 17:20:36

标签: java logging log4j

在linux中,用户名由$ USER环境变量提供。

说我有以下log4j配置

log4j.rootLogger=info, infoApp
# this should contain only INFO messages
log4j.appender.infoApp=org.apache.log4j.RollingFileAppender
log4j.appender.infoApp.File=/mylogs/logs/app/app.info.log
log4j.appender.infoApp.layout=org.apache.log4j.PatternLayout
log4j.appender.infoApp.layout.ConversionPattern=%d [%-5p] %t -- %m%n
log4j.appender.infoApp.MaxFileSize=10MB
log4j.appender.infoApp.MaxBackupIndex=6

如何在文件名中为使用此文件的应用程序动态添加用户名,以便user1登录到/mylogs/logs/app/app.user1.info.log,用户2日志进入/ mylogs /日志/应用/ app.user2.info.log?

我正在使用log4j 1.2.14,但如果需要可以升级。 Log4j也被其他我想不接触的源代码库使用。我的应用程序是一个独立的Java应用程序。

如果我将config中的文件名更改为/mylogs/logs/app/app.${env.USER}.info.log(假设我升级到log4j 2.3),它会在部署时进行替换以更改log4j.properties文件本身。我希望用户替换在运行时发生,因此多个用户可以使用相同的安装。

谢谢!

1 个答案:

答案 0 :(得分:1)

在运行时,您可以创建一个新的FileAppender并将其添加到根记录器,即

  FileAppender fileAppender = new FileAppender();
  fileAppender.setFile("userxylog.log");
  ....
  Logger.getRootLogger().addAppender(fileAppender)
  ....  

这里记录了这一点 https://logging.apache.org/log4j/1.2/apidocs/