栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

log4j打印html类型日志,并配置tomcat映射访问

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

log4j打印html类型日志,并配置tomcat映射访问

笔者是一个爱折腾的人,本着对软件开发的热爱,都要尝试一番:

  • 导入pom依赖文件,笔者这里是用的Spring boot版本控制这里就不写版本号了;
 
        
            org.springframework.boot
            spring-boot-starter
            
                
                    org.springframework.boot
                    spring-boot-starter-logging
                
            
        
        
            org.slf4j
            slf4j-api
        
        
            org.slf4j
            slf4j-log4j12
        
  • 写入配置文件:
log4j.rootLogger=DEBUG,stdout,HTML
#控制台输出日志
log4j.additivity.org.apache=true
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.threshold=INFO
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p %c{1}:%L - %m%n

#打印html的log文件
log4j.appender.HTML = org.apache.log4j.DailyRollingFileAppender
log4j.appender.HTML.File=${user.dir}/fileService/log4j/log.html
log4j.appender.HTML.DatePattern='.'yyyy-MM-dd-a
log4j.appender.HTML.encoding=UTF-8
#这里注意: 写的是html的配置class全路径
log4j.appender.HTML.layout =com.rubik.merchant.config.HTMLLogFormatLayOut
log4j.appender.HTML.Threshold=INFO
  • 配置html的格式类,这个全类名要写入上方的配置文件中的
import org.apache.log4j.HTMLLayout;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.helpers.Transform;
import org.apache.log4j.spi.LoggingEvent;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;


@Component
public class HTMLLogFormatLayOut extends HTMLLayout {


    public HTMLLogFormatLayOut() {
    }

    protected final int BUF_SIZE = 256;

    protected final int MAX_CAPACITY = 1024;

    static String TRACE_PREFIX = "
    "; private StringBuffer sbuf = new StringBuffer(BUF_SIZE); public static final String TITLE_OPTION = "Title"; 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 + "" + Layout.LINE_SEP); sbuf.append(""); sbuf.append(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .format(new java.util.Date())); sbuf.append("" + Layout.LINE_SEP); sbuf.append(""); if (event.getLevel().equals(Level.FATAL)) { sbuf.append(""); sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel()))); sbuf.append(""); } else if (event.getLevel().isGreaterOrEqual(Level.WARN)) { sbuf.append(""); sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel()))); sbuf.append(""); } else { sbuf.append(""); sbuf.append(Transform.escapeTags(String.valueOf(event.getLevel()))); sbuf.append(""); } sbuf.append("" + Layout.LINE_SEP); String content = Transform.escapeTags(event.getRenderedMessage()); if (content.contains("|")) { String[] temp = content.split("\|"); sbuf.append(""); sbuf.append(temp[0]); sbuf.append("" + Layout.LINE_SEP); } else { sbuf.append(""); sbuf.append(content); sbuf.append("" + Layout.LINE_SEP); } sbuf.append("" + Layout.LINE_SEP); if (event.getNDC() != null) { sbuf.append(""); sbuf.append("NDC: " + Transform.escapeTags(event.getNDC())); sbuf.append("" + Layout.LINE_SEP); } String[] s = event.getThrowableStrRep(); if (s != null) { sbuf.append(""); appendThrowableAsHTML(s, sbuf); sbuf.append("" + Layout.LINE_SEP); } return sbuf.toString(); } 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() { // 日志文件 的头 String title = "日志文件"; // 日志文件 表格的 头 StringBuffer sbuf = new StringBuffer(); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append(""); sbuf.append("" + title + "" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("body, table {font-family: 'Courier New',arial,sans-serif; font-size: 13px;}" + Layout.LINE_SEP); sbuf.append("th {background: #336699; color: #FFFFFF; text-align: center;}" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("" + Layout.LINE_SEP); sbuf.append("

" + Layout.LINE_SEP); return sbuf.toString(); } }

设置tomcat资源映射:

  • 这个类要么不写,写了映射就要统一放行,包括static目录如下所示:
  • 文件映射一般我会写在工作目录下,用 {user.dir}获取绝对路径,这里工作目录可以填写绝对路径;
  • 这里的 file:为本地静态资源的映射路径,设置后此路径文件可以服务器访问,log的html文件要配置在这里
@Configuration
@Slf4j
public class WebMvcConfig implements WebMvcConfigurer {

    // 实现静态资源的映射
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/meta-INF/resources/")  // 映射swagger2
                .addResourceLocations("file:/这里是工作目录/") // 映射本地静态资源
                .addResourceLocations("classpath:/resources/")
                .addResourceLocations("classpath:/static/");

    }
}

如果你用了权限类的框架记得给配置的映射路径放行

笔者用的spring security放行如下:

        @Override
        public void configure(WebSecurity web) throws Exception {
            web.ignoring().antMatchers("/swagger-ui.html","/webjars/**","/v2/**","/swagger-resources/**","/doc.html","/file/**","/images/**","/log4j/**");
        }

那么我们启动项目测试一下吧:

  • 正常启动后:在工作目录中,生成了log日志

    我们可以看到日志被正常访问了,你学废了吗;
转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号

时间日志级别类型