当前位置: 首页 > 知识库问答 >
问题:

默认log4j MDC值

闾丘诚
2023-03-14

有人知道如何使用log4j的配置XML为MDC中缺少的条目指定默认值吗?我在XML文件中定义了一个appender,如下所示:

<appender name="DBAppender" class="org.apache.log4j.jdbc.JDBCAppender"> 
    <param name="URL" value="jdbc:sqlserver://phenom\\MSSQLSERVER_2012\;databaseName=pickmax_express" /> 
    <param name="Driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" /> 
    <param name="User" value="user" /> 
    <param name="Password" value="password" /> 
    <layout class="org.apache.log4j.PatternLayout"> 
        <param name="ConversionPattern" 
          value="INSERT INTO LOG (source, message, order_id, log_level) VALUES ( 'TESTSOURCE','%m', %X{orderID}, 0)" 
        /> 
    </layout> 
</appender> 

有问题的部分是来自MDC的订单ID(%x{orderID})。我四处搜索,只找到了相同线程的重复部分,内容类似于$${orderid:-defaultValue},但这在此上下文中不起作用。当在没有订单ID的上下文中接收到日志消息时,我需要能够将该值默认为0或-1或其他一些提示值

共有1个答案

黄彬
2023-03-14

如果在java代码中访问MDC对象,可以通过在某个启动区域(例如,servlet init()方法)添加以下内容来初始化orderId的值:

import org.apache.log4j.MDC;

public void blammyStartupMethod()
{
    MDC.put("orderId", "sentinal value");
}

Edit:似乎每次编写没有orderId值的日志消息时,以及每次mdc.remove()之后,都需要设置此默认值。AOP似乎是这里的一种选择。

 类似资料:
  • 注:内容翻译自官网文档 Language Guide (proto3) 中的 Default Values 一节 当消息被解析时, 如果被编码的消息没有包含特定的简单元素, 被解析的对象对应的字段被设置为默认值. 默认值是和类型有关的: 对于strings, 默认值是空字符串(注, 是"", 而不是null) 对于bytes, 默认值是空字节(注, 应该是byte[0], 注意这里也不是null)

  • 主要内容:在创建表时设置默认值约束,在修改表时添加默认值约束,删除默认值约束默认值(Default)的完整称呼是“默认值约束(Default Constraint)”,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。 例如,员工信息表中,部门位置在北京的较多,那么部门位置就可以默认为“北京”,系统就会自动为这个字段赋值为“北京”。 默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。 在

  • 我正在开发一个JPA应用程序,并且我正在使用eclipse链接提供程序。 我有一个表T1,其中有一个字段F1定义为非null,并且有一个默认值(“U”)。 我已经定义了一个映射到表T1的实体。该实体有一个映射到字段F1的属性,我已经用注释@ReturnInsert(returnOnly=true)配置了该属性。 文件说明: 使用@返回插入使INSERT操作将值返回到正在写入的对象中 如果在映射到F

  • hibernate有没有一种方法可以为每个字段定义默认值,并且为了数据库大小的缘故,可以写null而不是这些默认值? 对于inst,假设字符串的默认值为“”。我想Hibernate到: 为数据库中具有NULL的每个字段返回". 写NULL到数据库,当我尝试写" 当然,我可以写成千上万个Getters和Setters,但是它能自动完成吗?

  • Parameter Position Type Required Default Description 1 string No empty This is the default value to output if the variable is empty. 这是变量为空的时候的默认输出。 This is used to set a default value for a variable.

  • 注意 当前章节中涉及的配置一般适用于关系数据库。这里展示的扩展方法在你安装了关系数据库提供程序之后就能获得(由Microsoft.EntityFrmeworkCore.Relational 程序包共享)。 数据列的默认值是插入一个数据行但未指定该列的值时所插入的值。 惯例 按照惯例不会配置默认值。 数据注解 不能使用数据注解来设置默认值。 流式 API 可以使用流式 API 来为属性设置默认值。

  • Defaults类提供Java各原生类型的默认值 com.google.common.base.Defaults.defaultValue(Class type) boolean.class //返回false char.class //返回'\0' byte.class

  • 我目前正在使用vscode和apachepoi,创建了一个程序来自动创建<code>。xlsx编程并让A1单元输入一个名为“Tester”的字符串,然后弹出错误。 我程序中的代码: 错误代码: 嗯.xml( Apache POI对我来说是新的,请帮助我,我会非常感激,非常感谢。