log4j2的进阶文档。主要写其中网上没什么资料,比较实用的几个地方。
来源:互联网 发布:淘宝代销能赚到钱吗 编辑:程序博客网 时间:2024/05/20 00:48
这是一篇log4j2的进阶文档。在这里面我就不再说基础的使用配置了,如果还没对log4j2有了解,请自行学习后再查看我这篇文档。
我只列出我在使用之中摸索到的然而网上没什么资料的一些地方。
一、生成的日志文件如何指定在项目目录?
之前使用过logback框架的时候我是通过 “System.setProperty("logdir", realPath);”,然后在配置文档中通过${logdir}的方式引用的。
但是在log4j2中稍微改变了一下,设置方式是一样的:System.setProperty("logdir", realPath);,但是引用方式却改成:${sys:logdir}了。
二、如何手动载入配置文件
对log4j2有了解的人都应该清楚,log4j2的配置文件log4j2.xml、log4j.json等等(还有几种命名方式)存放在classpath目录都会自动载入。
这里介绍一种代码手动载入的方法:
File file = new File(realPath+"static//data//log4j2.xml"); try { LoggerContext context =(LoggerContext)LogManager.getContext(false); context.setConfigLocation(file.toURI()); //重新初始化Log4j2的配置上下文 context.reconfigure(); }catch(Exception e){ System.out.println("[SYSTEM]==> Log4j2 初始化失败,读取[log4j2]文件失败!"); }}建议在web.xml配置一个listener:
<listener><listener-class>com.toby.servlet.ServletInitListener</listener-class></listener>
然后在这个listener里面加载,记得第一点的System.setProperty("logdir", realPath);要在第二点之前设置。
当使用第一点设置目录的方法的话,我建议配置文件手动加载比较好。因为我试过配置文件放在默认位置的时候,可能是默认顺序的问题,有时会出现${sys:logdir}未设置到。
贴上我的ServletInitListener的代码吧。
public class ServletInitListener implements ServletContextListener{public void contextDestroyed(ServletContextEvent event) {System.getProperties().remove("logdir");}public void contextInitialized(ServletContextEvent event) {System.setProperty("logdir", event.getServletContext().getRealPath("/"));initLog4j(event.getServletContext().getRealPath("/"));}private void initLog4j(String realPath) {File file = new File(realPath+"static//data//log4j2.xml"); try { LoggerContext context =(LoggerContext)LogManager.getContext(false); context.setConfigLocation(file.toURI()); //重新初始化Log4j2的配置上下文 context.reconfigure(); }catch(Exception e){ System.out.println("[SYSTEM]==> Log4j2 初始化失败,读取[log4j2]文件失败!"); }}}
三、我以前使用log4j1,如何迁移至log4j2
如果我们以前使用log4j1的时候,并没有使用slf4j或者用了但是没有通过slf4j的api调用日志。
我们获得日志的方法是:private static Logger log = Logger.getLogger(TestController.class);
但是log4j2获得日志的方法是:private static Logger log = LogManager.getLogger(TestController.class);
然而我们又没有去封装使用,难道就要每一个地方去修改了吗?这显然是不可能的,封装的太多类里面用了日志了。
其实很简单,我们只需要引入一个jar包,因为我用的是maven,所以我直接提供他的依赖,没用的朋友可以自行去下载jar包。
<!-- 我用的是2.5版本的 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-1.2-api</artifactId><version>2.5</version></dependency>只要加了这个包,之前log4j1的调用方法就可以维持不变了。
写这篇文章主要是因为网上这方面的资料不太多,特别是第三点,有的博客居然指出只能一一改代码。
汗,最后在官网上看到可以使用这个包。
这篇文章大概就写到这里了。如果文章里面有什么错漏,欢迎指出。
这篇文章大概就写到这里了。如果文章里面有什么错漏,欢迎指出。
1 0
- log4j2的进阶文档。主要写其中网上没什么资料,比较实用的几个地方。
- 好程序员需要主要的几个地方
- 没什么好写的!
- 没什么要写的
- 没什么好写的
- 没什么可写的
- 没什么写的
- 几个比较实用的函数
- Nokia的几个资料文档。
- git比较好用的几个地方
- Java学了几个月,写的记事本,从网上借鉴了一部分,可能有些不足的地方,分享一下~~
- 暂时没什么好写的
- 没什么好写的啊
- linux下使用errno的几个需要主要的地方
- 几个比较的实用的函数
- 比较实用的android学习资料
- Freemarker - 几个比较实用的例子
- ultraEdit 比较实用的几个快捷键
- sql表 强制解锁
- Android系统之路(初识MTK) ------ 内置三方apk到Rom可移动/可卸载
- hibernate乐观锁与悲观锁
- 6.UIAlertView的基本使用
- Spring 配置 druid连接池 c3p0连接池
- log4j2的进阶文档。主要写其中网上没什么资料,比较实用的几个地方。
- Placebo Effect(安慰剂效应)
- JAVA字符串转日期或日期转字符串
- PLSQL查询乱码
- sqlstate[hy000] [2002] No such file or directory in ...错误
- ng-option 的两种写法
- 5.1.4. List Comprehensions(列表解析)
- hibernate事件机制
- 我想做一条机器狗