不同版本的nutz与log4j2的集成方法
2019独角兽企业重金招聘Python工程师标准>>>
1. 来龙去脉
生成日志非常重要的程序,需要考虑未来切换日志方案的可能。在使用nutz时,nutz会提供一套日志的adaptor,方便以后的切换。具体使用时,可以在程序中使用nutz提供的log相关api,而不是直接使用log4j1,log4j或者其他的日志实现。
升级到nutz-1.r.58后,这种方法会带来nutz自身的日志会打印异常,log4j找不到appender了。具体日志(程序启动后)如下:
log4j:WARN No appenders could be found for logger (org.nutz.resource.Scans).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
2. 解决方案
2.1. 版本说明
- log4j2-2.3
- nutz-1.b.53, nutz-1.r.57, nutz-1.b.58尝试。
2.2. 核心通用代码及配置
2.2.1. 代码
import com.hoperun.epu.base.nutz.IocMaster;
import org.apache.logging.log4j.ThreadContext;
import org.nutz.dao.Dao;
import org.nutz.dao.Sqls;
import org.nutz.dao.impl.sql.callback.FetchTimestampCallback;
import org.nutz.dao.sql.Sql;
import org.nutz.ioc.Ioc;
import org.nutz.log.Log;
import org.nutz.log.Logs;public class AK47 {private static Log log = null;private static Ioc ioc = null;static {System.setProperty("log4j.configurationFile", "etc/log4j2.xml");log = Logs.get();}public static void main(String[] args) {ThreadContext.put("threadName", Thread.currentThread().getName());Thread.currentThread().setName("ak47-main");ioc = IocMaster.getInstance();welcome();}private static void welcome() {System.out.println("***************************************************");System.out.println("Application: AK47");System.out.println("Version: 0.1.0");System.out.println("Description: A date generator and loader");System.out.println("***************************************************");log.info("AK47 has started. Please enjoy it!");}
}
2.2.2. Log4j2配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="info" packages="com.rhfdz.epu"><properties><!-- 控制台输出日志格式 --><property name="patterns.console">%d %-5p [%t] %C{1} - %m%n</property><!-- 日志文件输出日志格式 --><Property name="patterns.file">%d %-5p [%t] %C - %m%n</Property><!-- 日志文件大小 --><Property name="file.size">50 MB</Property><!-- 日志文件最大个数 --><Property name="file.maxIndex">10</Property></properties><appenders><console name="console" target="SYSTEM_OUT"><!--这个都知道是输出日志的格式--><PatternLayout pattern="${patterns.console}"/></console><routing name="routing"><routes pattern="$${thread:threadName}"><route><rollingFile name="logFile-${thread:threadName}"fileName="log/${thread:threadName}.log"filePattern="log/$${date:yyyy-MM}/${thread:threadName}-%d{MM-dd-yyyy}-%i.log.gz"><patternLayout pattern="${patterns.file}" /><policies><sizeBasedTriggeringPolicy size="${file.size}" /></policies><defaultRolloverStrategy max="${file.maxIndex}" /></rollingFile></route></routes></routing><!--<async name="async" bufferSize="1000" includeLocation="true">--><!--<appenderRef ref="routing" />--><!--<appenderRef ref="console" />--><!--</async>--></appenders><loggers><logger name="com.rhfdz.epu" level="debug"/><logger name="org.nutz" level="info"/><root level="info"><!--<appenderRef ref="async" />--><appenderRef ref="console" /><appenderRef ref="routing" /></root></loggers>
</configuration>
2.3. 不同nutz版本的处理方法
2.3.1. nutz-1.b.53
2.3.1.1. 日志效果
ALL Nutz Log via Log4jLogAdapter
2016-10-12 22:14:16,301 INFO [main] Logs - Nutz is licensed under the Apache License, Version 2.0 .
Report bugs : https://github.com/nutzam/nutz/issues
2016-10-12 22:14:17,711 INFO [ak47-main] AnnotationIocLoader - Scan complete ! Found 5 classes in 1 base-packages!
beans = ["samplePerfKpiAnalyzer", "littleBlueBird", "samplePerfDao", "skGenerator", "generalStatDao"]
2016-10-12 22:14:17,720 INFO [ak47-main] NutIoc - NutIoc init begin ...
2016-10-12 22:14:17,722 INFO [ak47-main] NutIoc - ... NutIoc init complete
***************************************************
Application: AK47
Version: 0.1.0
Description: A date generator and loader
***************************************************
2016-10-12 22:14:17,723 INFO [ak47-main] AK47 - AK47 has started. Please enjoy it!
2.3.1.2. maven依赖
<dependency><groupId>org.nutz</groupId><artifactId>nutz</artifactId><version>1.b.53</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.3</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.3</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-1.2-api</artifactId><version>2.3</version></dependency>
2.3.2. nutz-1.r.57
2.3.2.1. 日志效果
2016-10-12 22:21:01,417 INFO [ak47-main] AnnotationIocLoader - Found 5 classes in 1 base-packages!
beans = ["samplePerfKpiAnalyzer", "littleBlueBird", "samplePerfDao", "skGenerator", "generalStatDao"]
2016-10-12 22:21:01,443 INFO [ak47-main] NutIoc - NutIoc init begin ...
2016-10-12 22:21:01,446 INFO [ak47-main] NutIoc - ... NutIoc init complete
***************************************************
Application: AK47
Version: 0.1.0
Description: A date generator and loader
***************************************************
2016-10-12 22:21:01,446 INFO [ak47-main] AK47 - AK47 has started. Please enjoy it!
与1.b.53相比INFO日志有所变化,少了如下内容
ALL Nutz Log via Log4jLogAdapter
2016-10-12 22:14:16,301 INFO [main] Logs - Nutz is licensed under the Apache License, Version 2.0 .
Report bugs : https://github.com/nutzam/nutz/issues
2.3.2.2. maven依赖
与nutz-1.b.53的依赖配置基本相同,仅对nutz依赖做调整如下
<dependency><groupId>org.nutz</groupId><artifactId>nutz</artifactId><version>1.r.57</version></dependency>
2.3.3. nutz-1.r.58
2.3.3.1. 日志效果
2016-10-12 22:26:03,466 INFO Log4j appears to be running in a Servlet environment, but there's no log4j-web module available. If you want better web container support, please add the log4j-web JAR to your web archive or server lib directory.
2016-10-12 22:26:05,094 INFO [ak47-main] AnnotationIocLoader - Found 5 classes in 1 base-packages!
beans = ["samplePerfKpiAnalyzer", "littleBlueBird", "samplePerfDao", "skGenerator", "generalStatDao"]
2016-10-12 22:26:05,111 INFO [ak47-main] NutIoc - NutIoc init begin ...
2016-10-12 22:26:05,114 INFO [ak47-main] NutIoc - ... NutIoc init complete
***************************************************
Application: AK47
Version: 0.1.0
Description: A date generator and loader for nwims
***************************************************
2016-10-12 22:26:05,114 INFO [ak47-main] AK47 - AK47 has started. Please enjoy it!
2.3.3.2. maven依赖
与nutz-1.b.53的依赖配置基本相同,仅对nutz依赖做调整如下
<dependency><groupId>org.nutz</groupId><artifactId>nutz</artifactId><version>1.r.58</version><!-- 1.r.58的bug,需要excludelog4j,不然nutz会找不到appender --><!-- 参考:https://nutz.cn/yvr/t/1uj0eaetdei4kqr9qsipb53ics --><exclusions><exclusion><artifactId>log4j</artifactId><groupId>log4j</groupId></exclusion></exclusions></dependency>
如果不增加对log4j的exclusion,则会出现文章开头的情况。
3. 原始贴地址
本文内容的原始的讨论过程在nutz社区:https://nutz.cn/yvr/t/1uj0eaetdei4kqr9qsipb53ics
转载于:https://my.oschina.net/allman90/blog/757716
不同版本的nutz与log4j2的集成方法相关推荐
- NC6和NCC版本与微软AD域认证集成
NC6和NCC版本与微软AD域认证集成 1.使用场景: 企业内部因为系统繁多,为了统一帐号,有可能使用AD域认证,通俗说也就是所有系统使用微软AD域的帐号密码认证,AD域认证通过后系统才可以正常访问. ...
- 【机器学习实战】第7章 集成方法(随机森林和 AdaBoost)
第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...
- 第7章 集成方法、随机森林
欢迎分享本文,转载请保留出处 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重要决定时,大家可能都 ...
- 集成方法-随机森林和AdaBoost
本文转载自:https://github.com/apachecn/MachineLearning 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是 ...
- 机器学习实践之集成方法(随机森林和AdaBoost元算法提高分类性能)
本文根据最近学习机器学习书籍网络文章的情况,特将一些学习思路做了归纳整理,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. (未添加文章标签,特此补上,2018.1.14记.) 一.概述 ...
- 第七章 集成方法-随机森林和AdaBoost
集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个 ...
- 机器学习算法之集成方法
集成方法: ensemble method 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见. 机器学习处理问题时又何尝不是如 ...
- Google Test软件集成方法与使用
笔者结合自己的项目实战经验介绍Google Test的集成方法和基本使用教程,可直接将本文中的方法应用到自己的C++软件工程中,本文中的示例代码也可直接编译运行,建议在学习的过程中直接运行示例代码,不 ...
- LCE:一个结合了随机森林和XGBoost优势的新的集成方法
随机森林 [Breiman, 2001] 和 XGBoost [Chen and Guestrin, 2016] 已成为解决分类和回归的许多挑战的最佳机器学习方法.Local Cascade Ense ...
最新文章
- asp.net断点续传技术
- 新 IDE 出现,程序员迎来危机?
- [译] Python 2.7.6 标准库——详见github
- protel布线需要注意事项
- 使用CADisplayLink实现UILabel动画特效
- linux网络安装gtk2,(一) linux 下gtk2,python的安装
- 产品需求文档、需求结构图、数据字典、全局说明、用例描述、需求描述、逻辑流程、原型设计、页面交互、登录注册、词汇表、数据统计、用户表设计、接口需求、功能清单、业务流程图、Axure原型、prd、文档实例
- 计算机国二笔试试题,全国计算机等考试二笔试试题(2).ppt
- python global用法_Python 虚拟环境全知道
- centos 7安装zabbix 3.0
- 可控硅型号怎样识别_可控硅是什么_可控硅型号_可控硅分类及判别_可控硅种类...
- linux日常检查,Linux日常检查的shell
- [ASM] 基础概念
- 在php中cm和kg用什么表示,将g/cm³换算为kg/m³ (克每立方厘米换算为千克每立方米)...
- Priceline拥有五个子品牌分别是:Booking.com、Priceline.com、Agoda、Kayak 以及Rentalcars
- 《统计学习方法》第七章
- C语言求最大公约数的方法,辗转相除法,质因数分解法、短除法、更相减损法。
- matlab 匹配屏幕大小写,匹配正则表达式(不区分大小写)
- 现在的传奇游戏 哪个是真的传奇,真假传奇应该怎么区分?
- 力扣算法——78_子集
热门文章
- HTML示例06---段落(原格式标记)
- python美股财务数据曝光_python实现美股日k线数据获取
- 如何在pycharm debug类似python -m的命令
- differential forms
- Numpy的使用(4)
- 高斯列元素消去法c语言,【大神在哪里】高斯-列主元消去法
- oracle本地没装 配置,数据库--oracle安装配置(本地安装的步骤及各种问题解决方案)...
- 计算机系统 cpu课程,计算机操作系统
- mysql -u -p$_mysql_
- 【Python数据分析】数据预处理1——数据清洗