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

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

Java代码 
  1. # Define the root logger with appender file  
  2. log4j.rootLogger = DEBUG, FILE, INFO  
  3.   
  4. # Define the file appender  
  5. log4j.appender.FILE=org.apache.log4j.RollingFileAppender  
  6.   
  7. # Set the name of the file  
  8. log4j.appender.FILE.File=logs/morpheuslog.out  
  9.   
  10. # Set the immediate flush to true (default)  
  11. log4j.appender.FILE.ImmediateFlush=true  
  12.   
  13. # Set the threshold to debug mode  
  14. log4j.appender.FILE.Threshold=debug  
  15.   
  16. # Set the append to false, should not overwrite  
  17. log4j.appender.FILE.Append=true  
  18.   
  19. # Set the maximum file size before rollover  
  20. log4j.appender.FILE.MaxFileSize=50MB  
  21.   
  22. # Set the the backup index  
  23. log4j.appender.FILE.MaxBackupIndex=100  
  24.   
  25. # Define the layout for file appender  
  26. log4j.appender.FILE.layout=org.apache.log4j.PatternLayout  
  27. log4j.appender.FILE.layout.conversionPattern=%d [%t] %-5p %c - %m%n  
  28.   
  29. log4j.appender.INFO=org.apache.log4j.ConsoleAppender  
  30. log4j.appender.INFO.layout=org.apache.log4j.PatternLayout  
  31. log4j.appender.INFO.layout.conversionPattern=%d [%t] %-5p %c - %m%n  
  32.   
  33. log4j.logger.com.avocent.morphues = ERROR  
  34. log4j.logger.org.springframework = ERROR  
  35. log4j.logger.com.avocent.cdmr = ERROR  
  36. log4j.logger.org.jumpmind = INFO  
  37. log4j.logger.net.sf.ehcache.store = ERROR  
  38.   
  39. #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
解决的,于是我也照着这个做了

 

Java代码 
  1. 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的比较常见。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot 2,使用Jetty服务器上传文件可以通过以下步骤实现: 1. 添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> ``` 2. 在application.properties文件添加以下配置: ``` server.port=8080 spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB spring.servlet.multipart.file-size-threshold=2KB ``` 其,`spring.servlet.multipart.enabled=true`表示启用文件上传功能,`spring.servlet.multipart.max-file-size`和`spring.servlet.multipart.max-request-size`分别表示上传文件的最大大小和请求的最大大小,`spring.servlet.multipart.file-size-threshold`表示当上传文件大小超过此阈值时,将使用磁盘存储文件。 3. 在控制器添加文件上传接口: ```java @RestController public class FileUploadController { @PostMapping("/upload") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { // 处理上传文件 if (!file.isEmpty()) { byte[] bytes = file.getBytes(); String fileName = file.getOriginalFilename(); // 存储文件 // ... return "上传成功"; } else { return "文件为空"; } } } ``` 在以上代码,`@PostMapping("/upload")`表示接受POST请求,并且请求路径为`/upload`,`@RequestParam("file")`表示接收名为`file`的文件参数。 关于Tomcat文件上传问题,可以参考类似的步骤,在application.properties文件添加以下配置: ``` spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB spring.servlet.multipart.file-size-threshold=2KB ``` 然后在控制器添加文件上传接口即可。需要注意的是,Tomcat默认不支持文件上传,需要手动添加相应的依赖,比如在Maven项目,可以添加以下依赖: ```xml <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-core</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-el</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-websocket</artifactId> <version>${tomcat.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>${tomcat.version}</version> </dependency> ``` 其,`${tomcat.version}`为Tomcat版本号。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值