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的集成方法相关推荐

  1. NC6和NCC版本与微软AD域认证集成

    NC6和NCC版本与微软AD域认证集成 1.使用场景: 企业内部因为系统繁多,为了统一帐号,有可能使用AD域认证,通俗说也就是所有系统使用微软AD域的帐号密码认证,AD域认证通过后系统才可以正常访问. ...

  2. 【机器学习实战】第7章 集成方法(随机森林和 AdaBoost)

    第7章 集成方法 ensemble method 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重 ...

  3. 第7章 集成方法、随机森林

    欢迎分享本文,转载请保留出处 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重要决定时,大家可能都 ...

  4. 集成方法-随机森林和AdaBoost

    本文转载自:https://github.com/apachecn/MachineLearning 集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是 ...

  5. 机器学习实践之集成方法(随机森林和AdaBoost元算法提高分类性能)

       本文根据最近学习机器学习书籍网络文章的情况,特将一些学习思路做了归纳整理,详情如下.如有不当之处,请各位大拿多多指点,在此谢过. (未添加文章标签,特此补上,2018.1.14记.) 一.概述 ...

  6. 第七章 集成方法-随机森林和AdaBoost

    集成方法: ensemble method(元算法: meta algorithm) 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个 ...

  7. 机器学习算法之集成方法

    集成方法: ensemble method 概述 概念:是对其他算法进行组合的一种形式. 通俗来说: 当做重要决定时,大家可能都会考虑吸取多个专家而不只是一个人的意见. 机器学习处理问题时又何尝不是如 ...

  8. Google Test软件集成方法与使用

    笔者结合自己的项目实战经验介绍Google Test的集成方法和基本使用教程,可直接将本文中的方法应用到自己的C++软件工程中,本文中的示例代码也可直接编译运行,建议在学习的过程中直接运行示例代码,不 ...

  9. LCE:一个结合了随机森林和XGBoost优势的新的集成方法

    随机森林 [Breiman, 2001] 和 XGBoost [Chen and Guestrin, 2016] 已成为解决分类和回归的许多挑战的最佳机器学习方法.Local Cascade Ense ...

最新文章

  1. asp.net断点续传技术
  2. 新 IDE 出现,程序员迎来危机?
  3. [译] Python 2.7.6 标准库——详见github
  4. protel布线需要注意事项
  5. 使用CADisplayLink实现UILabel动画特效
  6. linux网络安装gtk2,(一) linux 下gtk2,python的安装
  7. 产品需求文档、需求结构图、数据字典、全局说明、用例描述、需求描述、逻辑流程、原型设计、页面交互、登录注册、词汇表、数据统计、用户表设计、接口需求、功能清单、业务流程图、Axure原型、prd、文档实例
  8. 计算机国二笔试试题,全国计算机等考试二笔试试题(2).ppt
  9. python global用法_Python 虚拟环境全知道
  10. centos 7安装zabbix 3.0
  11. 可控硅型号怎样识别_可控硅是什么_可控硅型号_可控硅分类及判别_可控硅种类...
  12. linux日常检查,Linux日常检查的shell
  13. [ASM] 基础概念
  14. 在php中cm和kg用什么表示,将g/cm³换算为kg/m³ (克每立方厘米换算为千克每立方米)...
  15. Priceline拥有五个子品牌分别是:Booking.com、Priceline.com、Agoda、Kayak 以及Rentalcars
  16. 《统计学习方法》第七章
  17. C语言求最大公约数的方法,辗转相除法,质因数分解法、短除法、更相减损法。
  18. matlab 匹配屏幕大小写,匹配正则表达式(不区分大小写)
  19. 现在的传奇游戏 哪个是真的传奇,真假传奇应该怎么区分?
  20. 力扣算法——78_子集

热门文章

  1. HTML示例06---段落(原格式标记)
  2. python美股财务数据曝光_python实现美股日k线数据获取
  3. 如何在pycharm debug类似python -m的命令
  4. differential forms
  5. Numpy的使用(4)
  6. 高斯列元素消去法c语言,【大神在哪里】高斯-列主元消去法
  7. oracle本地没装 配置,数据库--oracle安装配置(本地安装的步骤及各种问题解决方案)...
  8. 计算机系统 cpu课程,计算机操作系统
  9. mysql -u -p$_mysql_
  10. 【Python数据分析】数据预处理1——数据清洗