如何更改log4j中的htmllayout

2023-11-23

我想更改Java中log4j的htmllayout(5列 - 时间,线程,级别,类别,消息)。

我的 log4j.properties 是:

log4j.rootLogger=DEBUG, Console, File

log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.File=org.apache.log4j.FileAppender
log4j.appender.File.File =${logfilename}

log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n

log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout=org.apache.log4j.HTMLLayout
log4j.appender.FILE.layout.Title=HTML Layout Example
log4j.appender.File.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
#[%d{MMM dd HH:mm:ss}] %-5p (%F:%L) - %m%n 

log4j.appender.File.Threshold=INFO
log4j.appender.Console.Threshold=DEBUG

我想更改“时间”列的名称并显示当前时间。 有人可以帮我怎么做吗?


我找到了一个有效的解决方案。

package com.mypackage;  

import java.text.SimpleDateFormat;  
import java.util.Date;  
import java.util.regex.Matcher;  
import java.util.regex.Pattern;  

import org.apache.log4j.spi.LoggingEvent;  

/** 
 * This HTML Log Formatter is a simple replacement for the standard Log4J HTMLLayout formatter and 
 * replaces the default timestamp (milliseconds, relative to the start of the log) with a more readable 
 * timestamp (an example of the default format is 2008-11-21-18:35:21.472-0800). 
 * */  

public class   MyLayout  
       extends org.apache.log4j.HTMLLayout  

{  
// RegEx pattern looks for <tr> <td> nnn...nnn </td> (all whitespace ignored)  

private static final String rxTimestamp = "\\s*<\\s*tr\\s*>\\s*<\\s*td\\s*>\\s*(\\d*)\\s*<\\s*/td\\s*>";  

//* The timestamp format. The format can be overriden by including the following   
  * property in the Log4J configuration file:  
  *  
  * log4j.appender.<category>.layout.TimestampFormat  
  *  
  * using the same format string as would be specified with SimpleDateFormat.  
  *  
  */  

private String timestampFormat = "yyyy-MM-dd-HH:mm:ss.SZ"; // Default format. Example: 2008-11-21-18:35:21.472-0800  

private SimpleDateFormat sdf = new SimpleDateFormat(timestampFormat);  

public MyLayout()  
{  
super();  
}  

/** Override HTMLLayout's format() method */  

public String format(LoggingEvent event)  
{  
String record = super.format(event); // Get the log record in the default HTMLLayout format.  

Pattern pattern = Pattern.compile(rxTimestamp);  // RegEx to find the default timestamp  
Matcher matcher = pattern.matcher(record);  

if (!matcher.find()) // If default timestamp cannot be found,  
{  
return record; // Just return the unmodified log record.  
}  

StringBuffer buffer = new StringBuffer(record);   

buffer.replace(matcher.start(1), // Replace the default timestamp with one formatted as desired.  
       matcher.end(1),  
       sdf.format(new Date(event.timeStamp)));  

return buffer.toString(); // Return the log record with the desired timestamp format.  
}  

/** Setter for timestamp format. Called if log4j.appender.<category>.layout.TimestampFormat property is specfied */  

public void setTimestampFormat(String format)   
{  
    this.timestampFormat = format;  
this.sdf = new SimpleDateFormat(format); // Use the format specified by the TimestampFormat property  
}  

/** Getter for timestamp format being used. */  

public String getTimestampFormat()  
{  
return this.timestampFormat;  
}  

} 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改log4j中的htmllayout 的相关文章

随机推荐

  • 在 C# 中使用 SQLCommand 进行批量更新/插入

    我怎样才能实现批量update insert using SQLCommand 我想创造SQLCommand动态文本for的循环MyObject 在 C 中为 10SQLParameter 如果是散装的insert 我需要检查每条记录是否已
  • C++ 基类中受保护字段的问题

    我有一个基类 比如说BassClass 有一些字段 我将它们保护起来 还有一些纯虚函数 然后是派生类 比如说DerivedClass like class DerivedClass public BassClass DerivedClass
  • UITableView 内容大小何时随行插入/删除动画更新

    我很好奇 UITableView 的内容大小在执行插入 删除动画调用后何时更新 我认为它会像大多数 UIView 动画 块一样 即使动画尚未完成 帧大小 内容大小也会立即更新 但似乎并非如此 有任何想法吗 不幸的是 在从 UITableVi
  • 我应该使用 new Type() 还是仅使用 Type() 来调用构造函数

    两种语法是等效的 至少我认为它们是等效的 let o1 new Object or let o2 Object 您更常使用哪种方式 可读性问题怎么办 我觉得省略 新 会更实用一些 所以这是我的偏好 我喜欢您可以像对待任何其他返回类型实例的函
  • Terraform ELB access_log S3访问权限问题

    当我尝试为我的 elb access log 创建 s3 存储桶时 我遇到了 terraform 问题 出现以下错误 Error applying plan 1 error s occurred module elb author dev
  • 编译器能否将隐式声明的虚拟析构函数的实现放在单个单独的翻译单元中?

    以下代码编译并链接Visual Studio 2017 年和 2019 年 permissive 但不与任何一个编译gcc or clang foo h include
  • 在运行实例中切换到 Composer 模式

    如何轻松地将现有项目切换为 Composer 该项目现已从 6 1 更新到 8 7 并且应该在 Composer 中运行 全新的作曲家设置不是问题 对于上一个项目 我创建了一个新主机 通过 Composer 安装了 TYPO3 通过 Com
  • 如何更改屏幕方向,而不在Android上创建新的活动?

    不知道标题是否正确 事情是这样的 我有一个应用程序在手机和平 板电脑上的工作方式不同 在手机上它显示为纵向 在平板电脑上显示为横向 为了实现这一目标 我创建了一个名为 CoreActivity 的类 它由我的所有活动扩展并执行以下操作 pu
  • roslyn 编译器未使用 msbuild 复制到 AspnetCompileMerge 文件夹

    我有一个 NET MVC 项目 我正在尝试使用 Jenkins 进行部署 我一直让 Jenkins 运行 msbuild 然后使用 RoboCopy 复制生成的文件 我想切换为仅使用发布配置文件 发布配置文件在使用 Visual Studi
  • 根据内容调整 RichTextBox 的大小

    此代码根据 RichTextBox 的内容自动调整其大小 我遇到了问题 尤其是表格 t可能会被忽略 我尝试了托管解决方案 现在我正在尝试平台调用 电流输出 DllImport gdi32 dll static extern bool Get
  • 在 VueJS 中配置 Get、Post、Patch 全局标头的最佳方法

    我是 VueJs 的新手 我正在寻找在 VueJS 中为 Get Post Patch 配置全局标头的最佳方法 即使用方便 安全性强 目前我只是把它写在export default 对于每个组件 我知道这非常糟糕 所以我请求你们帮忙 感谢
  • 如何使用LDAP对用户进行密码验证?

    我正在编写一个客户端应用程序 使用OpenLDAP库 用户通过 LDAP 服务器进行身份验证 以下是无法比较用户的 userPassword 的硬编码示例程序 include
  • 页面加载后删除 div 时发生 jQuery 冲突

    我正在尝试从页面中删除一个div 最好完全阻止它加载 但现在我决定在页面加载后将其删除 当我尝试以下代码行时在jsFiddle中 the content正如预期的那样 div 被删除 但是 我也尝试过实施它一个实际的网站 但在这种情况下 c
  • Camera.getPicture 不是 ionic 3 中的函数

    我正在使用相机插件单击离子应用程序中的图片 但出现以下错误 OrdercancelPage html 24 ERROR TypeError Object is not a function at Camera getPicture inde
  • Unity构造函数注入其他参数

    我有一个带有构造函数的类 如下所示 public BatchService IRepository repository ILogger logger string user 在我的 DI 引导程序类中 我有以下内容RegisterType
  • 切换 python 打印的最佳方法是什么?

    我在游戏引擎中运行 Python 2 4 并且希望能够在需要时关闭所有打印 例如 我希望在调试版本中打开打印 然后在发布版本中关闭打印 它还必须尽可能透明 我在引擎的 C 代码中对此的解决方案是printf里面的函数vararg宏 并将其定
  • 从 Google Places API (Swift 3) 获取附近地点的列表

    我知道已经存在类似的威胁 但是exact我正在寻找的主题似乎没有被触及 我是一个编程新手 但是 我成功地运行了一个应用程序 它可以获取您当前的位置 将坐标转换为地址 并能够将您的位置数据存储在 tableView 中 现在我正在寻找一种方法
  • Html 锚标记 onclick() 和 href 同时执行

    如同HTML 锚链接 href 和 onclick 两者 帖子 我的是 a href tmp download mp3 Download link a The update 方法将向服务器发送另一个 HTTP GET 方法来更新已下载的文件
  • MATLAB 是否优化 diag(A*B)?

    假设我有两个非常大的矩阵A M N 和B N M 我需要的对角线A B 计算完整的A B需要 M M N 次乘法 而计算它的对角线只需要 M N 次乘法 因为不需要计算最终位于对角线之外的元素 MATLAB 是否实现了这一点并进行即时优化d
  • 如何更改log4j中的htmllayout

    我想更改Java中log4j的htmllayout 5列 时间 线程 级别 类别 消息 我的 log4j properties 是 log4j rootLogger DEBUG Console File log4j appender Con