用java编程方式实现logback和log4j的自定义格式日志
来源:互联网 发布:前端性能优化 阮一峰 编辑:程序博客网 时间:2024/06/04 01:34
近期有个项目需要在不同的目录下打印"yyyyMMdd.log"格式的日志,以方便flume进行日志收集,查看了相关的官方文档http://logback.qos.ch/manual/layouts.html,下面是简单的实现:
<span style="font-size:12px;">import java.text.SimpleDateFormat;import java.util.Date;import org.slf4j.LoggerFactory;import ch.qos.logback.classic.Logger;import ch.qos.logback.classic.LoggerContext;import ch.qos.logback.classic.encoder.PatternLayoutEncoder;import ch.qos.logback.classic.spi.ILoggingEvent;import ch.qos.logback.core.FileAppender;/** * 根据不同的日志类型,打印不同路径下的yyyyMMdd.log格式日志,例如./logs/flume/playerLogin/20141111.log * @author melvin0987@163.com */public class LoggerUtil {public static Logger getLogger(Class<?> clazz) {Logger rootLogger = (Logger) LoggerFactory.getLogger(clazz);LoggerContext loggerContext = rootLogger.getLoggerContext();//loggerContext.reset();PatternLayoutEncoder encoder = new PatternLayoutEncoder();encoder.setContext(loggerContext);encoder.setPattern("%m");encoder.start();FileAppender<ILoggingEvent> appender = new FileAppender<ILoggingEvent>();String fileName = getTime("yyyyMMdd") + ".log";String filePath = LogPathConst.LOG_PREFIX + clazz.getSimpleName() + "/" + fileName;appender.setFile(filePath);appender.setContext(loggerContext);appender.setEncoder(encoder);appender.start();rootLogger.addAppender(appender);return rootLogger;}private static String getTime(String format) {SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.format(new Date());}}</span>
以下是log4j的实现方法,上面的是结合这个和官方API修改的
<span style="font-size:12px;">import java.text.SimpleDateFormat;import java.util.Date;import org.apache.log4j.FileAppender;import org.apache.log4j.Level;import org.apache.log4j.Logger;import org.apache.log4j.PatternLayout;import org.apache.log4j.RollingFileAppender;public class LoggerUtil {public static Logger getLogger(Class<?> clazz) {Logger logger = Logger.getLogger(clazz); // 生成新的Loggerlogger.removeAllAppenders(); // 清空Appender,特別是不想使用現存實例時一定要初始化logger.setLevel(Level.INFO); // 设定Logger級別。logger.setAdditivity(false); // 设定是否继承父Logger。默认为true,继承root输出;设定false后将不输出root。FileAppender appender = new RollingFileAppender(); // 生成新的AppenderPatternLayout layout = new PatternLayout();layout.setConversionPattern("%m"); // log的输出形式appender.setLayout(layout);String fileName = getTime("yyyyMMdd") + ".log";String filePath = LogPathConst.LOG_PREFIX + clazz.getSimpleName() + "/" + fileName;appender.setFile(filePath); // log输出路径appender.setEncoding("UTF-8"); // log的字符编码appender.setAppend(true); // 日志合并方式: true:在已存在log文件后面追加 false:新log覆盖以前的logappender.activateOptions(); // 适用当前配置logger.addAppender(appender); // 将新的Appender加到Logger中return logger;}private static String getTime(String format) {SimpleDateFormat sdf = new SimpleDateFormat(format);return sdf.format(new Date());}}</span>
由于之前项目用的是log4j感觉性能有点慢,所以找logback替代,下面简单说说由log4j向logback转移的方法:
首先,就是jar包的替换了,将log4j相关的包删掉,增加logback-classic .jar,slf4j -api.jar 和 logback-core.jar。下载地址:http://logback.qos.ch/download.html
其次,由于原来的log4j配置文件是log4j.properties文件,logback只支持xml和groovy方式,所以需要转换,官方提供了便利的转换工具,地址:http://logback.qos.ch/translator/
最后,将转换过来的内容写入到logback.xml文件中,其中有些内容需要修改。
如果你之前打印日志的时候导入的包是apache的log4j包的话,次需要改为org.slf4j.Logger和org.slf4j.LoggerFactory;这样的话以后你更换日志框架的时候,无需再更改源码。
最近的测试中发现这种方法的耗时相对较长,于是又看了官方的文档,发现有更好的实现方式,无需写代码,只需要配置就了,具体的配置方法,见如下实例:
<!-- 服务器错误日志 --><appender name="ServerError" class="ch.qos.logback.core.rolling.RollingFileAppender"><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${BaseDir}/ServerError/%d{yyyyMMdd}.log</fileNamePattern></rollingPolicy><encoder><pattern>${ErrorPattern}</pattern><charset>${Encoding}</charset></encoder><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter></appender></span>这样不指定默认的文件名称,则会自动使用yyyyMMdd.log命名,以后按日期会自动滚动文件名。
0 0
- 用java编程方式实现logback和log4j的自定义格式日志
- 用java编程方式实现logback和log4j的自定义格式日志
- java中常用的日志框架-logback和log4j
- java 日志 slf4j, log4j, logback
- storm中的log4j到logback的迁移(自定义日志)
- java日志-slf4j和log4j及slf4j和logback
- log4j,logback,sl4j常用日志格式详解
- Java日志框架:SLF4J, Apache Common-Logging, Log4J和Logback
- Java日志框架:SLF4J, Apache Common-Logging, Log4J和Logback
- Java日志框架:SLF4J, Apache Common-Logging, Log4J和Logback
- Java 日志框架log4j 和logback 打印一条语句所用的时间比较
- JAVA 开发平台的技术和框架(五)日志管理 :common-logging slf4j log4j logBack
- java的几个日志框架log4j、logback、common-logging
- JAVA日志组件 log4j+logback+slf4j的关系与调试
- Java日志管理:common-logging、slf4j、log4j、logback的关系
- 使用logback输出日志,自定义输出格式
- Log4j2、Log4j、Logback自定义Appender实现
- Log4j和logback冲突,导致log4j配置失效控制台一直打印DEBUG级别的日志
- 下雪的动画模拟
- ceph存储 网络地址计算示例
- libcurl使用与例程
- Tomcat 虚拟目录
- C# 简单图像处理类
- 用java编程方式实现logback和log4j的自定义格式日志
- texfield只能输入数字和字母
- mysql优化汇总
- hdu5120 Intersection(求两个圆环相交的面积)
- Linux下安装protobuf并实现简单的客户端服务器端通信
- android 听筒播放模式
- River的Android学习笔记——数据持久化技术(使用SQLite数据库_1)
- 驼峰命名 + 高斯效果
- mysql使用小整理