之前分析过Log4J2是怎么加载我们应用程序中的配置文件的,参见Log4J2(五) - 配置文件是怎么获取的? . 但是当我们没有配置文件的时候,你会发现控制台会打印错误,这个时候你有没有想过一个问题:为什么没有配置好日志系统,它也能打印日志呢?
因为它在加载自定义的配置之前新建了一套默认配置。
ps:这里说的打印日志是指的应用程序打印日志,不是只Log4J2本身的日志,它本身的日志是由StatusLogger打印的,这个后续有时间再分析。
跟NullConguration一样, 是在LoggerContext的构造方法执行之前创建的。
private volatile Configuration configuration = new DefaultConfiguration();
当所有的配置方式都没有找到配置时,就会使用默认配置。
public DefaultConfiguration() {
//调用父类AbstractConfiguration的构造方法
super(null, ConfigurationSource.NULL_SOURCE);
//调用父类AbstractConfiguration的setToDefault方法,给rootLogger做默认配置
setToDefault();
}
private final ConcurrentMap<String, String> properties = new ConcurrentHashMap<>();
// 这就是上面提到的rootLogger,其实就是个空壳
private LoggerConfig root = new LoggerConfig();
protected AbstractConfiguration(final LoggerContext loggerContext, final ConfigurationSource configurationSource) {
//保存loggerContext的一个弱引用
this.loggerContext = new WeakReference<>(loggerContext);
this.configurationSource = Objects.requireNonNull(configurationSource, "configurationSource is null");
//如上面的代码,初始存放的是一个空map
componentMap.put(Configuration.CONTEXT_PROPERTIES, properties);
//新建一个插件管理器
pluginManager = new PluginManager(Node.CATEGORY);
//创建一个空的根节点
rootNode = new Node();
//设置配置状态开启初始化
setState(State.INITIALIZING);
}
protected void setToDefault() {
// LOG4J2-1176 facilitate memory leak investigation
setName(DefaultConfiguration.DEFAULT_NAME + "@" + Integer.toHexString(hashCode()));
//初始化输出的消息样式
//默认格式:%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
final Layout<? extends Serializable> layout = PatternLayout.newBuilder()
.
文章浏览阅读132次。权限信息· android.permission.REQUEST_INSTALL_PACKAGES· 与蓝牙设备配对· 完全的网络访问权限· 读取您的USB存储设备中的内容· 修改或删除您的USB存储设备中的内容· 开机启动· 录音· 访问USB存储设备的文件系统· 更改您的音频设置· 控制振动· android.Manifest.permission.DEVICE_POWER· 防止手机休眠· ..._魅族手机 知乎app安装路径
文章浏览阅读221次。VSCode现在是世界上最为常用的编辑器之一,为什么被称为编辑器,是因为它不像IDE一样集成了大量开发环境的配置,必须你手动配置很多东西,才能将它打造成为一个趁手的生产工具。VSCode最大的优势就在于它是完全免费的,你不需要支付任何费用,就可以得到一个开发各种代码的编辑器,也正因为它具有高拓展性,它可以用来编写Python、C++、C#、GO、Dart等一系列语言。你可以通过下面..._vscode可以开发dsp代码
文章浏览阅读168次。习惯优于配置springboot的配置文件application.properties(application.yml)中可以设置配置值,影响程序的运行方式。springboot中,习惯优于配置,指的就是程序中存在大量默认的配置(这些配置是基于习惯操作配置的),可以使程序在很少配置或没有配置的情况下就可以运行。怎么读取配置文件中的配置值,对程序来说很重要。定义配置文件 application.yml#value propertiesvalue: single: this is sing_springboot 程序读取配置文件
文章浏览阅读429次。和优秀的人为伍,受优秀者熏染,是我们的成长方式。一个人的优秀之路,就是他朋友圈不断聚集更多高人的过程。那么,最优秀的高人们都在哪里呢?我们搜遍全网,发现下面这些公众号里高人云集。这里推荐..._你会在朋友圈发实验课
文章浏览阅读2.2w次,点赞20次,收藏152次。今天课上学了点模型构建器的相关知识,在实际操作特此整理一下:1.流域_arcgis模型构建器是白色的
文章浏览阅读344次,点赞9次,收藏11次。然而,云耀L实例通过提供丰富的预置镜像和默认组件,让用户能够轻松上手,快速完成部署,有效解决了用户在部署过程中遇到的困难。面对市场的白热化竞争,云耀L实例不断提升自身实力,依托华为云多年的技术与经验积淀,提供更佳性能体验、更高易用性、更优性价比,让用户迈出“简单上云第一步”。它拥有“智能不卡顿、价优随心用、上手更简单、管理特省心”的特性,专注于实现“三步建站,两倍性能,简单上云第一步”的目标,能够克服传统云服务器的缺点和局限性,解决用户在使用云服务器过程中遇到的各种问题。显然,数字化技术产品和。
文章浏览阅读1.9k次。mysql慢查询,已经有现成的成熟的方案收集展示了:pt-query-digest结合box公司的anemometer,没用过的移步:《mysql慢查询可视化》(本章内容需要了解anemometer)。但DBA们一定还遇到过这样的问题:某个时间段CPU负载较高,但慢查却没有,有时连实时看processlist都看不出异常。这种情况一般是由高并发的但单个性能正常的SQL导致的,所以慢查没有,但总体负载会升高。那怎么办呢?选择1:配置events_statements_history_long,缺点明显_mysql digest
文章浏览阅读1.3k次。由于打印的日志太多 我们可以用fastjson稍微封装下 然后传给sink去处理,根据update delete insert实时更新下游数据。修改一条数据 age=1 ->age=2。_java代码flink1.13.0 读取mysql表信息
文章浏览阅读2.5k次。使用TCODE SMARTSTYLES 进入到style的设置界面,也可以直接从TCODE smartforms 里面进入。STYLE 分为三部分,header data, paragraph format, character format。header data 设置style 的默认值,paragraph format 设置段落格式, 对齐方式,缩进,间距,行间距。其中space befor..._设置form表单中各行间距
文章浏览阅读251次。------ Java培训、Android培训、iOS培训、.Net培训 期待与您交流! -------方法类型标识符:"+"表示类方法,"-"表示对象方法类的声明 @interface 类名:父类名 { 定义属性; } 声明方法;@end
文章浏览阅读494次,点赞8次,收藏7次。/获取StrStream中的数据。//ds获取Xmlrdr中的数据。//读取文件中的字符流。1读取xml转换为dataset。
文章浏览阅读55次。对于标签编码,可以使用独热编码(one-hot encoding)将每个标签表示为一个向量,其中只有对应标签的位置为1,其他位置为0。接下来,我们创建一个包含一个隐藏层(100个神经元)的BP神经网络模型,并设置训练参数。最后,我们计算预测准确率。手写数字识别是人工智能领域中一项重要的任务,它在许多应用中都有广泛的应用,例如自动邮件排序、银行支票处理和手写数字识别等。其中,numEpochs是训练的迭代次数,learningRate是学习率,inputs是训练数据的输入,targets是对应的目标输出。_matlab手写数字识别神经网络bp