`
xfxlch
  • 浏览: 163025 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

log4j在jetty服务器下生成的log日志文件的相对路径问题

    博客分类:
  • Java
阅读更多

   今天系统有个小的bug:程序中log4j生成的log日志在开发环境和部署完之后的运行环境两个地方的不一样很是奇怪。以下log4j.properties文件:

# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE, INFO

# Define the file appender
log4j.appender.FILE=org.apache.log4j.RollingFileAppender

# Set the name of the file
log4j.appender.FILE.File=logs/morpheuslog.out

# Set the immediate flush to true (default)
log4j.appender.FILE.ImmediateFlush=true

# Set the threshold to debug mode
log4j.appender.FILE.Threshold=debug

# Set the append to false, should not overwrite
log4j.appender.FILE.Append=true

# Set the maximum file size before rollover
log4j.appender.FILE.MaxFileSize=50MB

# Set the the backup index
log4j.appender.FILE.MaxBackupIndex=100

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%d [%t] %-5p %c - %m%n

log4j.appender.INFO=org.apache.log4j.ConsoleAppender
log4j.appender.INFO.layout=org.apache.log4j.PatternLayout
log4j.appender.INFO.layout.conversionPattern=%d [%t] %-5p %c - %m%n

log4j.logger.com.avocent.morphues = ERROR
log4j.logger.org.springframework = ERROR
log4j.logger.com.avocent.cdmr = ERROR
log4j.logger.org.jumpmind = INFO
log4j.logger.net.sf.ehcache.store = ERROR

#End of LOG4J

  一般默认情况下如果
log4j.appender.FILE.File=logs/morpheuslog.out
这样写的话,系统会自动把日志放到程序执行的根目录下。
例如:我们在
jetty-distribution-8.1.2下用start.bat启动服务器,那么相应的日志会自动写到
jetty-distribution-8.1.2下的logs文件夹下面。
但是当我们把程序打包成exe安装文件之后,也同样是用
jetty-distribution-8.1.2的start.bat启动,但是就是写不到logs/morpheuslog.out里面去。反而在我们一台远程服务器上它把日志写到了jetty-distribution-8.1.2/bin/logs/morpheuslog.out很是郁闷。
google 了一圈,一般都是用
log4j.appender.errorfile.File=${catalina.home}/logs/LogFilename.log
解决的,于是我也照着这个做了

 

log4j.appender.FILE.File=${JETTY_HOME}/logs/morpheuslog.out

因为我们的jetty服务器的主目录设置就是这样的SET JETTY_HOME=%CD%

但是我 这么做了之后发现没有用,还是什么效果也没有。

另外有人反映说用listener监听器,在程序刚启动的时候,就给Property设值

publicvoid contextInitialized(ServletContextEvent event){ServletContext context = event.getServletContext();System.setProperty("rootPath", context.getRealPath("/"));}

Then in the log4j.properties file:

log4j.appender.file.File=${rootPath}WEB-INF/logs/MyLog.log

众人反映这个方法可行,但是其实跟catalina.home是一样的。
正当我要这么尝试的时候,我突然发现startup.bat文件中有这么一句:
-Djetty.home=%JETTY_HOME% -jar start.jar
所以想刚才我的方法是没有问题的,可能是写法有点问题,于是我重写了一下。
log4j.appender.FILE.File=${jetty.home}/logs/morpheuslog.out
然后重新把它部署服务器上,重启了一下服务之后,我发现真的可以了。

 

所以一般情况下为了能使日志输出到相对指定的目录下的话,可以更具体的指出到某一个主目录下就比较好了。

一般来说,jetty的话是放在jetty/logs的比较常见。

 

 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics