velocity源码分析:初始化之日志系统

Velocity所需jar包 velocity所需jar下载 commons-beanutils.jar commons-collections-3.1.jar commons-digester-1.8.jar velocity-1.7.jar velocity-1.7-dep.jar velocity-tools-2.0.jar 立即下载

之前在“velocity源码分析:velocity初始化”文章中粗略地介绍了velocity整体的初始化过程,包括各个系统的初始化,本文主要介绍日志系统初始化。


日志系统类图:



概要:

1.调用:velocity源码中这种封装方式我个人是比较赞同的,也是相当容易扩展,对于日志系统之外的内容只需要关注Log(进行日志操作),LogManager(日志系统初始化)即可;

2.日志系统扩展:目前该套代码包含了大部分的日志记录方式,假设以后新增一种记录方式,只要添加对应的Chute并实现LogChute接口即可;

3.日志记录方式扩展:LogDisplayWrapper已经很好的实现了扩展,对于日志,新增一些标识,该类完全足够;


说明:

Velocity在初始化时调用RuntimeInstance.initializeLog()进行日志系统的初始化。

该方法调用如下代码,传入日志系统接口类和配置信息初始化。

LogManager.updateLog(this.log, this);

方法具体实现:

 public static void updateLog(Log log, RuntimeServices rsvc) throws Exception
    {
        // create a new LogChute using the RuntimeServices
        LogChute newLogChute = createLogChute(rsvc);
        LogChute oldLogChute = log.getLogChute();

        // pass the new LogChute to the log first,
        // (if the old was a HoldingLogChute, we don't want it
        //  to accrue new messages during the transfer below)
        log.setLogChute(newLogChute);

        // If the old LogChute was the pre-Init logger,
        // dump its messages into the new system.
        if (oldLogChute instanceof HoldingLogChute)
        {
            HoldingLogChute hlc = (HoldingLogChute)oldLogChute;
            hlc.transferTo(newLogChute);
        }
    }

1.创建LogChute:

LogChute的创建采用反射的方式初始化配置文件中定义

runtime.log.logsystem
和
runtime.log.logsystem.class

的内容。看看一下velocity自带的配置文件:

runtime.log.logsystem.class = org.apache.velocity.runtime.log.Log4JLogChute,org.apache.velocity.slf4j.Slf4jLogChute,org.apache.velocity.runtime.log.CommonsLogLogChute,org.apache.velocity.runtime.log.ServletLogChute,org.apache.velocity.runtime.log.JdkLogChute

# ---------------------------------------------------------------------------
# This is the location of the Velocity Runtime log.
# ----------------------------------------------------------------------------

runtime.log = velocity.log


默认不配置runtime.log.losystem,但配置了对应class列表,该列表的初始化顺序是:

org.apache.velocity.runtime.log.Log4JLogChute,
org.apache.velocity.slf4j.Slf4jLogChute,
org.apache.velocity.runtime.log.CommonsLogLogChute,
org.apache.velocity.runtime.log.ServletLogChute,org.
apache.velocity.runtime.log.JdkLogChute
默认初始化log4日志。 当一个日志系统能获取后就丢弃其他信息

2.替换日志系统:

RuntimeInstance代码中有成员变量:private Log log = new Log();初始化默认的日志系统。

Log()代码:

public Log()
    {
        setLogChute(new HoldingLogChute());
    }

可以发现,RuntimeInstance在初始化日志系统之前,默认使用HoldingLogChute()。

再看初始化LogManager.updateLog方法,该方法在初始化log系统之后先把原先的日志信息记录下来,如果原先采用的是HoldingLogChute,则把原先记录的信息写到新的日志系统中。

这是个很简单但很有用的日志系统信息交换的方式。


至此:RuntimeInstance中:
 
private Log log = new Log();
初始化好了,至于
private  ExtendedProperties overridingProperties = null;
在调用时作初始化







        
Cursor+Playwright MCP实战:如何用自然语言一键生成UI自动化测试脚本 本文探讨了如何利用Cursor与Playwright MCP实现自然语言驱动的UI自动化测试脚本生成。通过智能IDE与浏览器自动化协议的结合,开发者可以高效创建稳定的测试脚本,显著提升测试效率与维护性。重点介绍了MCP架构的优势、项目结构最佳实践及团队协作规范,为自动化测试带来革命性改进。 阅读详情

相关推荐

手把手教你使用Segformer训练自己的数据

SegFormer 基于Swin transformer 修改

weixin_38353277的博客 2万+

velocity.properties配置说明

1.Runtime  Logruntime.log  =  velocity.log用以指定 Velocity 运行时日志文件的路劲和日志文件名,如不是全限定的绝对路径,系统会认为想对于 当前目录.runtime.log.logsystem这个参数没有默认值,它可指定一个实现了

张星的博客 2万+

VSCODE编辑+EIDE插件调试+STM8_Debug插件调试+IAR_STM8工具链编译开发项目

1. 安装 在VS CODE安装EIDE、STM8-Debug插件 2. 使用 EIDE 创建一个 8/16 Bit MCU 项目 新建虚拟文件夹,把工程外部的文件添加进虚拟文件夹,实现工程和源文件之间的关系,而不用实际把源文件复制到工程目录下。 EIDE工程和源文件实现分开放置,EIDE(EIDE工程)、EWSTM8(IAR STM8工程)、Project(ST Visual Develop工程) 选择工具链 烧录工具选择 头文件包含目录 添加宏定义 3. 编译 4. 使用STM8

TrueLink的博客 5500

ERR Unsupported CONFIG parameter: notify-keyspace-events; nested exception is redis.clients.jedis.ex...

异常信息 时间:2017-04-05 15:53:57,361 - 级别:[ WARN] - 消息: [other] The web application [ROOT] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it. This is...

weixin_30691871的博客 507

MATLAB打开.m文件乱码解决办法

Matlab打开.m文件出现中文乱码问题,是因为Matlab存在两种编码格式:GBK和UTF-8,而不同版本的Matlab编码格式可能不统一,因此在不同版本的Matlab打开文件,由于编码格式的改变,会导致注释乱码。 1.查看你的Matlab的文件编码方式,在Matlab的命令行窗口输入feature('locale') ,如下图,可以看到默认编码为GBK,那问题就变成了将Matlab的文件编码方式GBK修改成UTF-8; 2.找到你的Matlab安装目录bin文件夹下的lcdata_utf.

zhugby的博客 4万+

Oracle EBS订单的流程(Order->AR)

基本流程创建订单路径:Order Management > Orders,Returns > Sales Orders填写订单头信息,客户,订单类型,销售人员填写订单体信息,输入物料,数量...然后Book Order,订单Book之后,你会发现订单头的Status的状态变成了“Booked”,订单行的状态为"Awaiting Shipping",记录下来你的订单号,后边的每一步都需要这个订单号。

田攀的日志 4万+

在 Spring 4.3.9下升级 Velocity 1.7.x to Velocity 2.0.x 出现的问题

等待 Spring 升级支持 Velocity 2.0.x 或自己改 Spring 的源码。

oligaga的博客 728

PP触发EWM产生PMR捡配

PP触发EWM产生PMR捡配 前言 PMR: Production Material Request 在流程订单/生产订单下达后,可以在EWM中产生PMR,在EWM中, PMR其实代表了ERP中的流程订单/生产订单。 You can use SAP EWM in conjunction with the following PP application components: • Production Orders • Process Orders • Repetitive Manufacturing •

ZevYang的博客 1918

velocity源码分析:velocity初始化

velocity初始化类结构图: 描述: 1.RuntimeConstants定义常量,主要是velociyt初始化的配置项的key 2.四个方法实现该接口主要是共用公共定义的常量,发现很多开源框架喜欢继承公共常量定义的接口来公用变量。 3.Runti

madding 8189

冰河木马实验(V8.4)

简述: 百科词条 冰河木马开发于1999年,跟灰鸽子类似,在设计之初,开发者的本意是编写一个功能强大的远程控制软件。但一经推出,就依靠其强大的功能成为了黑客们发动入侵的工具,并结束了国外木马一统天下的局面,跟后来的灰鸽子等等成为国产木马的标志和代名词。 冰河的服务器端程序为G-server.exe,客户端程序为G-client.exe,默认连接端口为7626。其中攻击者使用G-client.e...

野原新之助 1万+

循环神经网络(RNN)原理及BPTT算法

因循环神经网络基于ANN之上,理解ANN有助于理解RNN,所以阅读此文,建议先阅读。

L 1768

VelocityContext 消息推动模板生成

核心依赖 <dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> <dependency> 模板内容 存放在数据库中 #set($porletAppId = "$orderTemplateUtil.getAli

weixin_38185589的博客 1318

嵌入式Linux&Android开发-TP调试

目录 一、修改DTS,添加新的I2C设备 二、修改Makefile,Kconfig 三、tp调试时的问题排查 一、修改DTS,添加新的I2C设备 &i2c4 { status = "okay"; clock-frequency = <400000>; gslX680@40 { compatible = "gslX680"; reg = <0x40>; touch-gpio = <&gp

嵌入式成长手册 570

自定义velocity日志目录

velocity运行时会生成velocity.log文件用于记录运行日志但是此文件默认会保存在项目根目录下,不便与管理,希望将其生成到指定目录下。本文是将其配置到根目录下的log文件夹中。在获取模板引擎初始化是传入相关配置,核心代码如下。

han_xingyuan的博客 624

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

velocity初始化的日志很奇怪,就debug了一下

先上代码: public class TemplateUtil {     private static RuntimeInstance ri = new RuntimeInstance();     public static Template getTemplate(String relativePath, String fileName) {         Stri

gaboolic的专栏 3030

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Velocity中需要引用到的jar包

现在越来越多的项目开始使用Velocity作为view,最近在使用Eclipse开发Velocity项目中,对引用的jar包特别去关注了,以下是我的一些个人观点,仅供参考: 1、velocity-1.5.jar 包含了veloctiy运行时需要的类 2、velocity-tools-1.4.jar 包含了velocity的视图控制和系统工具类 3、velocity-dvsl-1.0.j...

SW13968086129的博客 1721

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

velocity配置详解

文章引自: [url]http://www.open-china.net/blog/41388.html[/url] [color=blue][size=small][size=medium][size=small]velocity配置详解 在velocity二方包中有一个velocity.properties 文件定义了velocity的配置信息(位于org.apache.veloc...

Iori202的专栏 527

spring mvc整合velocity源码分析

spring整合velocity 首先看下springMVC整合velocity的

gaohe7091的专栏 2257

框架代码生成器ERROR:

Error initializing log: Failed to initialize an instance of org.apache.velocity.runtime.log.Log4JLogChute with the current runtime configuration. SysGeneratorServiceImpl generatorCode方法添加Velocity.setP...

John的博客 830

velcoity使用说明:foreach指令

当在velocity中需要显示一个列表信息,我们会用foreach循环输出, 要求: 假如现在需要在页面中输出单数的内容背景为红,双数的内容为黑,构造方式如下: package org.apache.velocity.test.issues; import jav

madding 1万+
上一篇: velocity源码分析:初始化之配置文件
下一篇: velocity源码分析:初始化之ResourceManager
「已注销」
博客等级 码龄20年 47粉丝 107原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值