log4j 自定义配置日志

这段时间公司要自己写一个巡检项目,就每次不用自己去巡检,放在服务器上,用rundeck设置定时任务跑着就行,之后每日查看日志信息。

日志要求是按照自定义列去生成excel文档。

网上资料有限,学习之后记录一下,希望能帮到有需要的人。

首先是maven配置,在pom.xml添加这些:


		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.25</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.25</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-simple</artifactId>
			<version>1.7.25</version>
		</dependency>

log4j配置  这配置比较简单易懂:

log4j.rootLogger = INFO,D

### 输出INFO 级别以上的日志文件设置 ###
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File =/sgmw/runJars/log/sparkInspectionAll.xlsx//生成表格格式
log4j.appender.D.Append = true
log4j.appender.D.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.D.Threshold = INFO
log4j.appender.D.layout = com.bw.FormatHTMLLayout//自定义格式类的路径和类名
log4j.appender.D.Encoding=UTF-8

FormatHTMLLayout类,自定义格式类:

package com.llz.dailyInspection;

import org.apache.log4j.HTMLLayout;
import org.apache.log4j.Layout;
import org.apache.log4j.helpers.Transform;
import org.apache.log4j.spi.LoggingEvent;   
  
  
public class FormatHTMLLayout extends HTMLLayout {   
  
    public FormatHTMLLayout() {   
    }   
    protected final int BUF_SIZE = 256;   
    protected final int MAX_CAPACITY = 1024;   
    static String TRACE_PREFIX = "<br>    ";   
    private StringBuffer sbuf = new StringBuffer(BUF_SIZE);   
    String title="日志";   
  
    /**  
     * A string constant used in naming the option for setting the the HTML  
     * document title. Current value of this string constant is <b>Title</b>.  
     */  
    public static final String TITLE_OPTION = "Title";   
  
    // Print no location info by default   
    boolean locationInfo = true;   
       
    public String format(LoggingEvent event) {   
        if (sbuf.capacity() > MAX_CAPACITY) {   
            sbuf = new StringBuffer(BUF_SIZE);   
        } else {   
            sbuf.setLength(0);   
        }   
        sbuf.append(Layout.LINE_SEP + "<tr style=\"text-align:left\"> " + Layout.LINE_SEP);   
  
        sbuf.append("</td>" + Layout.LINE_SEP);   
        /* 日志内容 */
        String content = Transform.escapeTags(event.getRenderedMessage());
    //这里content就是logger.inf("")里面的内容 并且已经用下划线 "|"分开各个字段 下面我会具体写 
        if (content.contains("|")) {
            String[] temp = content.split("\\|");  
            sbuf.append("<td title='列1'>");
            sbuf.append(temp[0]);
            sbuf.append("</td>" + Layout.LINE_SEP);
            
            sbuf.append("<td title='列2'>");
            sbuf.append(temp[1]);
            sbuf.append("</td>" + Layout.LINE_SEP);

            sbuf.append("<td title='列3'>");
            sbuf.append(temp[2]);
            sbuf.append("</td>" + Layout.LINE_SEP);
            

        }

        sbuf.append("</tr>" + Layout.LINE_SEP);

        if (event.getNDC() != null) {
            sbuf.append("<tr><td bgcolor=\"#EEEEEE\" style=\"font-size : xx-small;\" colspan=\"6\" title=\"Nested Diagnostic Context\">");
            sbuf.append("NDC: " + Transform.escapeTags(event.getNDC()));
            sbuf.append("</td></tr>" + Layout.LINE_SEP);
        }

        String[] s = event.getThrowableStrRep();
        if (s != null) {
            sbuf.append("<tr><td bgcolor=\"#66CDAA\" style=\"color:White; font-size : xx-small;\" colspan=\"6\">");
            appendThrowableAsHTML(s, sbuf);
            sbuf.append("</td></tr>" + Layout.LINE_SEP);
        }
        return sbuf.toString();
    
        
        
 
    }   
    /**
     * 生成HTML
     * @param s
     * @param sbuf
     */
    private void appendThrowableAsHTML(String[] s, StringBuffer sbuf) {   
        if (s != null) {   
            int len = s.length;   
            if (len == 0)   
                return;   
            sbuf.append(Transform.escapeTags(s[0]));   
            sbuf.append(Layout.LINE_SEP);   
            for (int i = 1; i < len; i++) {   
                sbuf.append(TRACE_PREFIX);   
                sbuf.append(Transform.escapeTags(s[i]));   
                sbuf.append(Layout.LINE_SEP);   
            }   
        }   
    }   
  
    /**
     * 返回的日志文件头
     */
    public String getHeader() {   
        StringBuffer sbuf = new StringBuffer();   
        sbuf.append("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">" + Layout.LINE_SEP);   
        sbuf.append("<html>" + Layout.LINE_SEP);   
        sbuf.append("<head>" + Layout.LINE_SEP);   
    
        sbuf.append("<title>" + title + "</title>" + Layout.LINE_SEP);   
        sbuf.append("<style type=\"text/css\">" + Layout.LINE_SEP);   
        sbuf.append("<!--" + Layout.LINE_SEP);   
        sbuf.append("body, table {font-family: '??',arial,sans-serif; font-size: 12px;}" + Layout.LINE_SEP);   
        sbuf.append("th {background: #336699; color: #FFFFFF; }" + Layout.LINE_SEP);   
        sbuf.append("-->" + Layout.LINE_SEP);   
        sbuf.append("</style>" + Layout.LINE_SEP);   
        sbuf.append("</head>" + Layout.LINE_SEP);   
        sbuf.append("<body bgcolor=\"#CCE8CFRGB\"  topmargin=\"6\" leftmargin=\"6\">" + Layout.LINE_SEP);   
    
        sbuf.append("<table  cellspacing=\"0\" cellpadding=\"4\" border=\"1\" bordercolor=\"#224466\" width=\"100%\">" + Layout.LINE_SEP);   
        sbuf.append("<tr> "+Layout.LINE_SEP);   
       
        sbuf.append("<th>列1</th>" + Layout.LINE_SEP);   
        sbuf.append("<th>列2</th>" + Layout.LINE_SEP);   
        sbuf.append("<th>列3</th>" + Layout.LINE_SEP);   
 
        return sbuf.toString();   
    }   
  
}  

然后再你需要生成日志的类里写:

public class SparkInspection {
	protected static final Logger logger = Logger.getLogger(SparkInspection.class);
    /*
    业务处理
    */
logger.info("列1"+" | "+"列2"+" | "+列3+ "); //用"|"分开   再在格式化类里面判断列
}

整体流程代码就这样  自己弄明白之后稍微记录一下   方便以后使用。

最后提供一个表格排版和I修改文档样式思路,这本是个html表格格式,可以先把文档格式改为.log或者是.html,用浏览器打开,再在浏览器修改想要的格式,修改好了记下改的东西,再在格式类里面相印位置做修改就方便很多。

如有不正确的地方  恳请指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值