详解log4j2(下)
来源:互联网 发布:管家婆软件手机版 编辑:程序博客网 时间:2024/06/16 07:46
转载地址 http://blog.csdn.net/autfish/article/details/51244787
1. 按日志级别区分文件输出
有些人习惯按日志信息级别输出到不同名称的文件中,如info.log,error.log,warn.log等,在log4j2中可通过配置Filters来实现。
假定需求是把INFO及以下级别的信息输出到info.log,WARN和ERROR级别的信息输出到error.log,FATAL级别输出到fatal.log,配置文件如下:
<Configuration status="WARN" monitorInterval="300"> <properties> <property name="LOG_HOME">D:/logs</property> </properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> <RollingRandomAccessFile name="InfoFile" fileName="${LOG_HOME}/info.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL" /> <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY" /> </Filters> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingRandomAccessFile> <RollingRandomAccessFile name="ErrorFile" fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="fatal" onMatch="DENY" onMismatch="NEUTRAL" /> <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY" /> </Filters> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingRandomAccessFile> <RollingRandomAccessFile name="FatalFile" fileName="${LOG_HOME}/fatal.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/fatal-%d{yyyy-MM-dd}-%i.log"> <Filters> <ThresholdFilter level="fatal" onMatch="ACCEPT" onMismatch="DENY" /> </Filters> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingRandomAccessFile> </Appenders> <Loggers> <Root level="trace"> <AppenderRef ref="Console" /> <AppenderRef ref="InfoFile" /> <AppenderRef ref="ErrorFile" /> <AppenderRef ref="FatalFile" /> </Root> </Loggers> </Configuration>
测试代码:
public static void main(String[] args) { Logger logger = LogManager.getLogger(Client.class); logger.trace("trace level"); logger.debug("debug level"); logger.info("info level"); logger.warn("warn level"); logger.error("error level"); logger.fatal("fatal level"); }
2 异步写日志
配置文件:
<Configuration status="WARN" monitorInterval="300"> <properties> <property name="LOG_HOME">D:/logs</property> <property name="FILE_NAME">mylog</property> </properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> <RollingRandomAccessFile name="MyFile" fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd HH-mm}-%i.log"> <PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" /> <Policies> <TimeBasedTriggeringPolicy interval="1" /> <SizeBasedTriggeringPolicy size="10 MB" /> </Policies> <DefaultRolloverStrategy max="20" /> </RollingRandomAccessFile> <Async name="Async"> <AppenderRef ref="MyFile" /> </Async> </Appenders> <Loggers> <Logger name="asynclog" level="trace" additivity="false" > <AppenderRef ref="Async" /> </Logger> <Root level="error"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration>3 输出到MongoDB
添加依赖:
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-nosql</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>3.2.2</version> </dependency>
配置文件:
<Configuration status="WARN" monitorInterval="300"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" /> </Console> <NoSql name="databaseAppender"> <MongoDb databaseName="test" collectionName="errorlog" server="localhost" port="27017" /> </NoSql> </Appenders> <Loggers> <Logger name="mongolog" level="trace" additivity="false"> <AppenderRef ref="databaseAppender" /> </Logger> <Root level="error"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration>
4 输出到Flume
Flume配置(flume-conf.properties)
agent1.sources=source1 agent1.sinks=sink1 agent1.channels=channel1 agent1.sources.source1.type=avro agent1.sources.source1.channels=channel1 agent1.sources.source1.bind=0.0.0.0 agent1.sources.source1.port=41414 agent1.sinks.sink1.type=file_roll agent1.sinks.sink1.sink.directory=D:/log agent1.sinks.sink1.channel=channel1 agent1.sinks.sink1.sink.rollInterval=86400 agent1.sinks.sink1.sink.batchSize=100 agent1.sinks.sink1.sink.serializer=text agent1.sinks.sink1.sink.serializer.appendNewline = false agent1.channels.channel1.type=file agent1.channels.channel1.checkpointDir=D:/log/checkpoint agent1.channels.channel1.dataDirs=D:/log/data
启动Flume(注:测试环境为windows)
flume-ng.cmd agent --conf ../conf/ --conf-file ../conf/flume-conf.properties -name agent1
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-flume-ng</artifactId> <version>2.5</version> </dependency>
配置
<Configuration status="WARN" monitorInterval="300"> <Appenders> <Flume name="eventLogger" compress="false"> <Agent host="127.0.0.1" port="41414" /> <RFC5424Layout enterpriseNumber="18060" includeMDC="true" appName="MyApp" /> </Flume> </Appenders> <Loggers> <Root level="trace"> <AppenderRef ref="eventLogger" /> </Root> </Loggers> </Configuration>
阅读全文
0 0
- 详解log4j2(下)
- 详解log4j2(下)
- 详解log4j2(下)
- 详解log4j2(下)
- 详解log4j2(下)
- Log4j2详解
- log4j2详解
- 详解log4j2
- [log4j2] 使用教程详解(怎么使用log4j2)
- log4j2配置文件log4j2.xml配置详解
- log4j2 使用详解
- log4j2 使用详解
- log4j2 使用详解
- log4j2 使用详解
- log4j2 使用详解
- log4j2 使用详解
- log4j2 使用详解
- log4j2配置详解
- 唯快不破:TCP/IP详解--UDP数据报中的IP分片
- 包与访问权限
- Reverse Integer
- 为什么 qt 成为 c++ 界面编程的第一选择?
- 数据结构与算法(Java)-001-数学知识回顾
- 详解log4j2(下)
- 【云星数据---Apache Flink实战系列(精品版)】:Apache Flink批处理API详解与编程实战005--DateSet实用API详解005
- 神经网络模糊测试:将DNN应用于软件安全测试
- mysql 执行计划详解
- 3D打印切片软件Cura及CuraEngine原理分析
- 标准I/O库
- java.lang.NoClassDefFoundError: org/apache/commons/collections/map/MultiKeyMap
- 第一个只出现一次的字符
- 多线程--非阻塞同步,CAS 原理分析