log4j2 的几种简单配置,集成配置MongoDB
前几天一直在配log4j2+jdbc保存业务日志,调试日志等,后面又使用log4j2+mongoDB保存这些日志。花了好长时间啊。记录一下提醒自己
<?xml version="1.0" encoding="UTF-8"?> 2 <!-- ========================== 自定义输出格式说明================================ --> 3 <!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL --> 4 <!-- %r 输出自应用启动到输出该log信息耗费的毫秒数 --> 5 <!-- %c 输出所属的类目,通常就是所在类的全名 --> 6 <!-- %t 输出产生该日志事件的线程名 --> 7 <!-- %n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n” --> 8 <!-- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 --> 9 <!-- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) --> 10 <!-- ========================================================================== --> 11 12 <Configuration status="WARN"> 13 <Appenders> 14 <!-- 控制台打印--> 15 <Console name="Console" target="SYSTEM_OUT"> 16 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] [%-5p] %c - %l - %m%n"/> 17 </Console> 18 19 20 <!-- 日志文件保存--> 21 <RollingFile name="RollingFile" fileName="D:/log4j2/hos/hos.log" 22 filePattern="D:/log4j2/$${date:yyyy-MM}/hos-%d{MM-dd-yyyy}-%i.log.gz"> 23 <!--<PatternLayout pattern="%d-[HL] %p %t %c - %msg%xEx%n"/>--> 24 <!--<PatternLayout pattern="%d-[HL] %p [%t] [%c] -%l - %m%n"/>--> 25 <PatternLayout 26 pattern='{"add_date":"%d{yyyy-MM-dd HH:mm:ss}","level":"%level","userName":"%X{userName}","class":"%X{class}","type":"%X{type}","method":"%M","message":"%m%n","ip":"%X{ip}","url":"%X{url}"}'/> 27 <Policies> 28 <TimeBasedTriggeringPolicy/> 29 <SizeBasedTriggeringPolicy size="1 MB"/><!-- 文件到1M的时候创建新文件--> 30 <!-- <DefaultRolloverStrategy max="10"/>--> 31 </Policies> 32 </RollingFile> 33 34 <!-- 保存到文件 级别为error专门保存错误信息--> 35 <RollingFile name="orrorFile" fileName="D:/log4j2/hos/error.log" 36 filePattern="D:/log4j2/$${date:yyyy-MM}/error-%d{MM-dd-yyyy}-%i.log.gz"> 37 <!--<PatternLayout pattern="%d-[HL] %p %t %c - %msg%xEx%n"/>--> 38 <!--<PatternLayout pattern="%d-[HL] %p [%t] [%c] -%l - %m%n"/>--> 39 <PatternLayout 40 pattern='{"add_date":"%d{yyyy-MM-dd HH:mm:ss}","level":"%level","userName":"%X{userName}","class":"%X{class}","type":"%X{type}","method":"%M","message":"%m%n","ip":"%X{ip}","url":"%X{url}"}'/> 41 <Policies> 42 <TimeBasedTriggeringPolicy/> 43 <SizeBasedTriggeringPolicy size="1 MB"/> 44 <!-- <DefaultRolloverStrategy max="10"/>--> 45 </Policies> 46 </RollingFile> 47 48 <!-- 日志保存至MongoDB--> 49 <!-- <NoSql name="databaseAppender"> 50 <MongoDb databaseName="admin" collectionName="logging" server = "192.168.1.220" 51 username = "admin" password = "admin" /> 52 <!– <PatternLayout pattern='{"add_date":"%d{HH:mm:ss.SSS}","thread":"%t","level":"%level","class":"%l","method":"%M","message":"%m","log_type":"%c"}'/>–> 53 </NoSql>--> 54 55 <NoSql name="databaseAppender"> 56 <MongoDb databaseName="admin" collectionName="logging" 57 factoryClassName="com.yihu.common.util.log.MongoLog4jAppender" 58 factoryMethodName="getMongoClient"/><!-- 此处需要一个能获取MongoDBClient或者DB的类,并指定获取的方法名,--> 59 </NoSql> 60 61 62 <!-- 保存到数据库--> 63 <!-- <JDBC name="databaseAppender" tableName="log_record"><!--指定数据库的表名--> 64 <ConnectionFactory class="com.yihu.hos.general.config.ConnectionFactory" method="getDatabaseConnection" /><!-- 此处需要配置一个获取数据库连接类,并制定相应的方法 --> 65 <Column name="event_date" isEventTimestamp="true" /><!--指定表对应列--> 66 <Column name="level" pattern="%level" /> 67 <Column name="class" pattern="%l" /> 68 <Column name="method" pattern="%M" /> 69 <Column name="message" pattern="%m" /> 70 <Column name="log_type" pattern="%c" /> 71 <Column name="user" pattern="%X{testname}" /> 72 </JDBC>--> 73 74 </Appenders> 75 76 77 <Loggers> 78 <Root level="trace"><!--默认输出级别--> 79 <AppenderRef ref="Console"/> 80 <AppenderRef level="debug" ref="databaseAppender"/><!--指定输出的基本> 81 <AppenderRef level="error" ref="orrorFile"/> 82 <AppenderRef ref="RollingFile"/> 83 </Root> 84 </Loggers> 85 </Configuration>
2.下面是获取mongoDb连接的类
1 public class MongoLog4jAppender{ 2 3 protected String host = "localhost"; 4 protected int port = 27017; 5 protected String database = "logs"; 6 protected Mongo mongo; 7 protected DB db; 8 9 public MongoLog4jAppender() { 10 this.mongo = new Mongo(host, port); 11 this.db = mongo.getDB(database); 12 } 13 /*取mongoDB应该从mongoDB的池中取出为佳,另看是否能借助 kafka之类的做批量的上传*/ 14 public static MongoClient getMongoClient() { 15 //TODO URI存到配置文件中 16 MongoClientURI uri = new MongoClientURI("mongodb://admin:admin@192.168.1.220/?authSource=admin"); 17 return new MongoClient(uri); 18 } 19 }
3.注:设置log4j2的自定义保存参数时使用 ThreadContext类进行添加(这尼玛我看了好久文档才发现,果然文档阅读能力还是太差)
http://www.cnblogs.com/demon-kingdom/
浙公网安备 33010602011771号