2019-09-02 09:33

@xiuj 不是每次都报,打出来的同一个包,有的时候会报,有的时候不会报

2019-08-22 16:54

@JFinal Log4j的源码里面是一个static块自己去加载的,优先取的Thread Context Loader ,取不到话就去取自身的class.getClassLoader()。

2019-08-22 16:23

@JFinal 嗯嗯,是的,jfinal的配置本来就是非常方便了,无奈log4j的配置文件我想放到外面,修改日志级别比较方便。

2019-08-22 16:16

@chcode 因为测试环境和生产环境的配置不同啊,不能直接解压覆盖。如果每次都拷贝整个zip的,需要额外做一些解压合并的工作,这样的话,就不方便做自动化了。通过将配置和应用分离,配置通过统一配置中心去获取,应用程序通过CI服务器获取,就可以在很大程序上实现自动化运维了。理想状态的话,就可以实现鼠标点击一个按钮,就可以将选中版本的应用程序以选中的配置,部署到指定的机器上。

2019-08-21 09:22

最后用了这种hack的方式解决了。。。。。。。。
ClassLoaderKit classLoaderKit = new ClassLoaderKit(PropExt.class.getClassLoader(), null);
PropertyConfigurator.configure(classLoaderKit.getClassLoader().getResource("log4j.properties"));
UndertowServer.start(AppConfig.class);

2019-08-21 08:52

我测试了一下:
log4j的classloader是 classloader:sun.misc.Launcher$AppClassLoader@5c647e05
Prop的classloader是classloader:com.jfinal.server.undertow.hotswap.HotSwapClassLoader@4524411f
应该是因为这个所以log4j的配置文件加载不到

2019-08-21 08:44

@JFinal fatjar里面没有log4j.properties。打成fatjar主要想是所有的依赖包可以打成一个jar包,部署的时候只copy一个jar包,增量部署的时候不用考虑是不是有新增的依赖。因为是纯接口项目,所以webapp只是用来上传文件用的,没有copy的必要。另外,我是想把配置和应用程序完全分开的,所以应用程序里除了sql模板,不包含任何配置文件。
我之前以为是把config目录附加到classpath里面去了,但是把log4j的配置文件放在config里好像加载不到。。。

2019-08-14 17:03

@JFinal 请问打成fatjar之后, 怎么修改log4j的配置文件?