log4j 配置文件啥时候被加载

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了log4j 配置文件啥时候被加载相关的知识,希望对你有一定的参考价值。

参考技术A   在系统启动的时候加载log4j的配置文件
  1、自定义监听类并且继承“ServletContextListener”接口:
  

  1 package cn.ibeans.common;
2
3 import java.io.File;
4 import java.util.List;
5
6 import javax.servlet.ServletContextEvent;
7 import javax.servlet.ServletContextListener;
8
9 import org.apache.log4j.Logger;
10 import org.apache.log4j.PropertyConfigurator;
11 import cn.ibeans.common.util.FileUtil;
12 /**
13 *
14 * @author hezuoan
15 *
16 */
17 public class ApplicationListener implements ServletContextListener
18
19 private static Logger log = Logger.getLogger(ApplicationListener.class);
20 @Override
21 public void contextInitialized(ServletContextEvent sce)
22
23 //获取log4j配置文件的地址
24 String log4jPath = ApplicationDispatchServlet.class.getResource("/").getPath() + "config/logs";
25 List<File> files = FileUtil.listFile(new File(log4jPath), "properties", false);
26
27 if ((files == null) || (files.size() == 0))
28 log.info("没有发现Log4j配置文件.");
29 return;
30
31 for (File file : files)
32 //加载配置文件
33 PropertyConfigurator.configure(file.getPath());
34
35 log.info("加载Log4j配置文件完成.");
36
37
38 @Override
39 public void contextDestroyed(ServletContextEvent sce)
40
41

  上述代码中FileUtil.listFile() 方法是自己封装的工具类。
  View Code
  2、在Web.xml 添加该监听器的配置:
  
  <listener>
<listener-class>cn.ibeans.common.ApplicationListener</listener-class>
</listener>

  
  加载log4j的配置文件的目的是为了使日志文件“放在跟工程相对路径的地方”,这样即使将项目移植到不同的操作系统上面,显示也是正常的。

网络字体啥时候加载,你可以预加载它们吗?

【中文标题】网络字体啥时候加载,你可以预加载它们吗?【英文标题】:When do web-fonts load and can you pre-load them?网络字体什么时候加载,你可以预加载它们吗? 【发布时间】:2012-10-26 07:57:30 【问题描述】:

我注意到在使用网络字体时,它们最初可能需要一秒钟才能出现;就像您创建一个下拉导航菜单一样,当您第一次将鼠标悬停在菜单上时,整个菜单将显示为背景颜色一秒钟,然后出现文本。

这并不理想,它让我相信加载 CSS 文件时并没有下载 webfonts,而是在您第一次在页面上查看它们时下载。

但另一方面,我已经在我的电脑上安装了字体,因此不需要下载它们,因此提出了一个问题,即他们为什么要这样做!?

这是我用来加载网络字体的 CSS:

@font-face 
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Regular-webfont.eot');
    src: url('../fonts/Roboto-Regular-webfont.eot?#iefix') format('embedded-opentype'),
         url('../fonts/Roboto-Regular-webfont.woff') format('woff'),
         url('../fonts/Roboto-Regular-webfont.ttf') format('truetype'),
         url('../fonts/Roboto-Regular-webfont.svg#RobotoRegular') format('svg');
    font-weight: normal;
    font-style: normal;


@font-face 
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Italic-webfont.eot');
    src: url('../fonts/Roboto-Italic-webfont.eot?#iefix') format('embedded-opentype'),
         url('../fonts/Roboto-Italic-webfont.woff') format('woff'),
         url('../fonts/Roboto-Italic-webfont.ttf') format('truetype'),
         url('../fonts/Roboto-Italic-webfont.svg#RobotoItalic') format('svg');
    font-weight: normal;
    font-style: italic;


@font-face 
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Bold-webfont.eot');
    src: url('../fonts/Roboto-Bold-webfont.eot?#iefix') format('embedded-opentype'),
         url('../fonts/Roboto-Bold-webfont.woff') format('woff'),
         url('../fonts/Roboto-Bold-webfont.ttf') format('truetype'),
         url('../fonts/Roboto-Bold-webfont.svg#RobotoBold') format('svg');
    font-weight: bold;
    font-style: normal;


@font-face 
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Light-webfont.eot');
    src: url('../fonts/Roboto-Light-webfont.eot?#iefix') format('embedded-opentype'),
         url('../fonts/Roboto-Light-webfont.woff') format('woff'),
         url('../fonts/Roboto-Light-webfont.ttf') format('truetype'),
         url('../fonts/Roboto-Light-webfont.svg#RobotoLight') format('svg');
    font-weight: 300;
    font-style: normal;


@font-face 
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Medium-webfont.eot');
    src: url('../fonts/Roboto-Medium-webfont.eot?#iefix') format('embedded-opentype'),
         url('../fonts/Roboto-Medium-webfont.woff') format('woff'),
         url('../fonts/Roboto-Medium-webfont.ttf') format('truetype'),
         url('../fonts/Roboto-Medium-webfont.svg#RobotoMedium') format('svg');
    font-weight: 500;
    font-style: normal;

【问题讨论】:

你能发布你用来加载字体的代码吗? @BillyMoat 抱歉,现在发布。 :) 使用src: local()。另见:***.com/questions/12312323/… 您的字体系列名称不应该是 Roboto、RobotoItalic 和 RobotoBold 之类的吗?在调用字体时,您是否还指定了诸如“Roboto”、Helvetica、Arial、sans-serif 之类的内容? @BillyMoat 对于你的后一个问题,是的,我是。对于你以前的问题,不,这样做意味着当网络字体下载失败并且字体应该是粗体时,你会遇到问题。见:***.com/questions/12562631/… 【参考方案1】:

什么时候下载网络字体?

Paul Irish 制作了一个简单的页面来测试:http://dl.getdropbox.com/u/39519/webfontsdemo/loadtest.html

它表明大多数浏览器在页面中使用字体而不是在 CSS 中声明时下载字体。我相信 IE 是个例外,但我现在没有运行它来测试。

下载使用而不是声明的原因是为了减少不必要的网络流量,例如如果字体已声明但未使用。

可以避免字体下载吗?

您说得对,如果字体已经安装,则不需要下载它们。正如上面@Patrick 所说,这可以使用local() 来完成。它在 CSS 中位于 url() 之前并采用字体名称(Mac OS X 上的 Safari 随后需要 PostScript 名称)。尝试对您的 CSS 进行以下更改:

@font-face 
    font-family: 'Roboto';
    src: url('../fonts/Roboto-Regular-webfont.eot');
    src: local(Roboto Regular), local(Roboto-Regular),
         url('../fonts/Roboto-Regular-webfont.eot?#iefix') format('embedded-opentype'),
         url('../fonts/Roboto-Regular-webfont.woff') format('woff'),
         url('../fonts/Roboto-Regular-webfont.ttf') format('truetype'),
         url('../fonts/Roboto-Regular-webfont.svg#RobotoRegular') format('svg');
    font-weight: normal;
    font-style: normal;

最后,为了减少字体下载时间,您可以确保执行以下操作:

将 CSS 放在 JavaScript 之前 为未来添加 Expires 标头 字体(以便浏览器缓存它们) 压缩字体

这里有一个很好的处理字体显示延迟的总结:http://paulirish.com/2009/fighting-the-font-face-fout/

【讨论】:

很好的建议。您能否详细说明一下或提供一个链接,说明为什么将 CSS 放在 JS 之前会提高性能? 更普遍的原因是,未动态加载的外部脚本会阻止进一步的下载和页面渲染,不仅在加载时,而且在执行时,所以将它们放在底部通常推荐页面的。另一方面,通常首先需要 CSS 以避免短暂显示无样式的页面。特别是关于 webfonts,IE 在字体下载之前不会呈现页面,如果它们位于脚本标签下方:stevesouders.com/blog/2009/10/13/font-face-and-performance

以上是关于log4j 配置文件啥时候被加载的主要内容,如果未能解决你的问题,请参考以下文章

log4j配置文件加载

将 formatMsgNoLookups 放在 Log4j XML 配置文件的啥位置

spring日志加载代码解析

springboot 关于log4j日志配置

log4j默认加载的配置文件

Log4j 2 配置文件