设为首页 收藏本站
查看: 895|回复: 0

[经验分享] 详解log4j2(下)

[复制链接]

尚未签到

发表于 2017-12-16 15:28:37 | 显示全部楼层 |阅读模式
1. 按日志级别区分文件输出
  有些人习惯按日志信息级别输出到不同名称的文件中,如info.log,error.log,warn.log等,在log4j2中可通过配置Filters来实现。
  假定需求是把INFO及以下级别的信息输出到info.log,WARN和ERROR级别的信息输出到error.log,FATAL级别输出到fatal.log,配置文件如下:
[java] view plain copy  print?

  • <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>
测试代码:[java] view plain copy  print?

  • 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 异步写日志
配置文件:[java] view plain copy  print?

  • <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>
测试代码:[java] view plain copy  print?

  • public static void main(String[] args) {
  •     Logger logger = LogManager.getLogger("asynclog");
  •     logger.trace("trace level");
  •     logger.debug("debug level");
  •     logger.info("info level");
  •     logger.warn("warn level");
  •     logger.error("error level");
  •     logger.fatal("fatal level");
  • }
3 输出到MongoDB
  添加依赖:
[java] view plain copy  print?

  • <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>
配置文件:[java] view plain copy  print?

  • <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)
[java] view plain copy  print?

  • 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)[java] view plain copy  print?

  • flume-ng.cmd agent --conf ../conf/ --conf-file ../conf/flume-conf.properties -name agent1
添加依赖:[java] view plain copy  print?

  • <dependency>
  •     <groupId>org.apache.logging.log4j</groupId>
  •     <artifactId>log4j-flume-ng</artifactId>
  •     <version>2.5</version>
  • </dependency>
配置文件:[java] view plain copy  print?

  • <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>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-424726-1-1.html 上篇帖子: Asp.net Core1.1创建简单WebAPI对Mongodb进行CRUD操作 下篇帖子: linux安装mongodb(设置非root用户和开机启动)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表