[转自] http://www.iteye.com/topic/378077

log4j是一个非常强大的log记录软件,下面我们就来看看在项目中如何使log4j。

首先当然是得到log4j的jar档,推荐使用1.2.X版,下载地址:

http://logging.apache.org/log4j/1.2/download.html

我们先看一个最简单的示例:

【示例1】

项目结构:





【注:由于这里的多个项目公用一个jar档,我们可以创建一个专门放置jar档的Java工程,然后将jar档放到lib目录下。在要使用的工程中按图所示进行引用 】

Java代码:

  1. package com.coderdream.log4j;
  2. import org.apache.log4j.Logger;
  3. public class HelloLog4j {
  4. private static Logger logger = Logger.getLogger(HelloLog4j.class);
  5. /**
  6. * @param args
  7. */
  8. public static void main(String[] args) {
  9. // System.out.println("This is println message.");
  10. // 记录debug级别的信息
  11. logger.debug("This is debug message.");
  12. // 记录info级别的信息
  13. logger.info("This is info message.");
  14. // 记录error级别的信息
  15. logger.error("This is error message.");
  16. }
  17. }
package com.coderdream.log4j;

import org.apache.log4j.Logger;

public class HelloLog4j {

	private static Logger logger = Logger.getLogger(HelloLog4j.class);

	/**
* @param args
*/
public static void main(String[] args) {
// System.out.println("This is println message."); // 记录debug级别的信息
logger.debug("This is debug message.");
// 记录info级别的信息
logger.info("This is info message.");
// 记录error级别的信息
logger.error("This is error message.");
}
}

配置文件log4j.properties:

  1. #可以设置级别:debug>info>error
  2. #debug:显示debug、info、error
  3. #info:显示info、error
  4. #error:只error
  5. log4j.rootLogger=debug,appender1
  6. #log4j.rootLogger=info,appender1
  7. #log4j.rootLogger=error,appender1
  8. #输出到控制台
  9. log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  10. #样式为TTCCLayout
  11. log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
#可以设置级别:debug>info>error
#debug:显示debug、info、error
#info:显示info、error
#error:只error
log4j.rootLogger=debug,appender1
#log4j.rootLogger=info,appender1
#log4j.rootLogger=error,appender1 #输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#样式为TTCCLayout
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout

输出结果:

  1. [main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.
  2. [main] INFO com.coderdream.log4j.HelloLog4j - This is info message.
  3. [main] ERROR com.coderdream.log4j.HelloLog4j - This is error message.
[main] DEBUG com.coderdream.log4j.HelloLog4j - This is debug message.
[main] INFO com.coderdream.log4j.HelloLog4j - This is info message.
[main] ERROR com.coderdream.log4j.HelloLog4j - This is error message.

通过配置文件可知,我们需要配置3个方面的内容:

1、根目录(级别和目的地);

2、目的地(控制台、文件等等);

3、输出样式。



下面我们来看看Log4J的类图:

Logger - 日志写出器,供程序员输出日志信息

Appender - 日志目的地,把格式化好的日志信息输出到指定的地方去


ConsoleAppender - 目的地为控制台的Appender

FileAppender - 目的地为文件的Appender

RollingFileAppender - 目的地为大小受限的文件的Appender

Layout - 日志格式化器,用来把程序员的logging request格式化成字符串

PatternLayout - 用指定的pattern格式化logging request的Layout



Log4j基本使用方法




  Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、 INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。



  一、定义配置文件



  其实您也可以完全不使用配置文件,而是在代码中配置Log4j环境。但是,使用配置文件将使您的应用程序更加灵活。Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件(键=值)。下面我们介绍使用Java特性文件做为配置文件的方法:



  1.配置根Logger,其语法为:




  log4j.rootLogger = [ level ] , appenderName, appenderName, …



  其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。 appenderName就是指B日志信息输出到哪个地方。您可以同时指定多个输出目的地。



  2.配置日志信息输出目的地Appender,其语法为:




  log4j.appender.appenderName = fully.qualified.name.of.appender.class

  log4j.appender.appenderName.option1 = value1

  …

  log4j.appender.appenderName.option = valueN



  其中,Log4j提供的appender有以下几种:

  org.apache.log4j.ConsoleAppender(控制台),

  org.apache.log4j.FileAppender(文件),

  org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),

  org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),

  org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)



  3.配置日志信息的格式(布局),其语法为:




  log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class

  log4j.appender.appenderName.layout.option1 = value1

  …

  log4j.appender.appenderName.layout.option = valueN



  其中,Log4j提供的layout有以e几种:

  org.apache.log4j.HTMLLayout(以HTML表格形式布局),

  org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

  org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

  org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)



  Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下: %m 输出代码中指定的消息



  %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

  %r 输出自应用启动到输出该log信息耗费的毫秒数

  %c 输出所属的类目,通常就是所在类的全名

  %t 输出产生该日志事件的线程名

  %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

  %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

  %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)



  二、在代码中使用Log4j




  1.得到记录器



  使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。其语法为:



  public static Logger getLogger( String name)



  通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:



  static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )



  2.读取配置文件



  当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:



  BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。

  PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。

  DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。



  3.插入记录信息(格式化日志信息)



  当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:



  Logger.debug ( Object message ) ;

  Logger.info ( Object message ) ;

  Logger.warn ( Object message ) ;

  Logger.error ( Object message ) ;

示例2~示例8

【示例2】 输出为文本文件或HTML文件

  1. #设置级别:
  2. log4j.rootLogger=debug,appender1
  3. #输出到文件(这里默认为追加方式)
  4. log4j.appender.appender1=org.apache.log4j.FileAppender
  5. #设置文件输出路径
  6. #【1】文本文件
  7. #log4j.appender.appender1.File=c:/Log4JDemo02.log
  8. #【2】HTML文件
  9. log4j.appender.appender1.File=c:/Log4JDemo02.html
  10. #设置文件输出样式
  11. #log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
  12. log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout
#设置级别:
log4j.rootLogger=debug,appender1 #输出到文件(这里默认为追加方式)
log4j.appender.appender1=org.apache.log4j.FileAppender
#设置文件输出路径
#【1】文本文件
#log4j.appender.appender1.File=c:/Log4JDemo02.log
#【2】HTML文件
log4j.appender.appender1.File=c:/Log4JDemo02.html
#设置文件输出样式
#log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender1.layout=org.apache.log4j.HTMLLayout

【 示例3】 输出为文本文件或HTML文件

  1. #设置级别和多个目的地
  2. log4j.rootLogger=debug,appender1,appender2
  3. #输出到控制台
  4. log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  5. #设置输出样式
  6. log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
  7. #输出到文件(这里默认为追加方式)
  8. log4j.appender.appender2=org.apache.log4j.FileAppender
  9. #设置文件输出路径
  10. #【1】文本文件
  11. #log4j.appender.appender2.File=c:/Log4JDemo02.log
  12. #【2】HTML文件
  13. log4j.appender.appender2.File=c:/Log4JDemo02.html
  14. #设置文件输出样式
  15. #log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout
  16. log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout
#设置级别和多个目的地
log4j.rootLogger=debug,appender1,appender2 #输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#设置输出样式
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout #输出到文件(这里默认为追加方式)
log4j.appender.appender2=org.apache.log4j.FileAppender
#设置文件输出路径
#【1】文本文件
#log4j.appender.appender2.File=c:/Log4JDemo02.log
#【2】HTML文件
log4j.appender.appender2.File=c:/Log4JDemo02.html
#设置文件输出样式
#log4j.appender.appender2.layout=org.apache.log4j.TTCCLayout
log4j.appender.appender2.layout=org.apache.log4j.HTMLLayout

【示例4】 SimpleLayout样式

  1. #设置级别和目的地
  2. log4j.rootLogger=debug,appender1
  3. #输出到控制台
  4. log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  5. #设置输出样式
  6. log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout
#设置级别和目的地
log4j.rootLogger=debug,appender1 #输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#设置输出样式
log4j.appender.appender1.layout=org.apache.log4j.SimpleLayout

输出结果:

  1. DEBUG - This is debug message.
  2. INFO - This is info message.
  3. ERROR - This is error message.
DEBUG - This is debug message.
INFO - This is info message.
ERROR - This is error message.

【示例5】 自定义样式

  1. #设置级别和目的地
  2. log4j.rootLogger=debug,appender1
  3. #输出到控制台
  4. log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  5. #设置输出样式
  6. log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
  7. #自定义样式
  8. # %r 时间 0
  9. # %t 方法名 main
  10. # %p 优先级 DEBUG/INFO/ERROR
  11. # %c 所属类的全名(包括包名)
  12. # %l 发生的位置,在某个类的某行
  13. # %m 输出代码中指定的讯息,如log(message)中的message
  14. # %n 输出一个换行
  15. log4j.appender.appender1.layout.ConversionPattern=%r [%t] [%p] - %c -%l -%m%n
#设置级别和目的地
log4j.rootLogger=debug,appender1 #输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#设置输出样式
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
#自定义样式
# %r 时间 0
# %t 方法名 main
# %p 优先级 DEBUG/INFO/ERROR
# %c 所属类的全名(包括包名)
# %l 发生的位置,在某个类的某行
# %m 输出代码中指定的讯息,如log(message)中的message
# %n 输出一个换行 log4j.appender.appender1.layout.ConversionPattern=%r [%t] [%p] - %c -%l -%m%n

输出结果:

  1. 0 [main] [DEBUG] - com.coderdream.log4j.HelloLog4j
  2. -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:16) -This is debug message.
  3. 31 [main] [INFO] - com.coderdream.log4j.HelloLog4j
  4. -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:18) -This is info message.
  5. 31 [main] [ERROR] - com.coderdream.log4j.HelloLog4j
  6. -com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:20) -This is error message.
0 [main] [DEBUG] - com.coderdream.log4j.HelloLog4j
-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:16) -This is debug message.
31 [main] [INFO] - com.coderdream.log4j.HelloLog4j
-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:18) -This is info message.
31 [main] [ERROR] - com.coderdream.log4j.HelloLog4j
-com.coderdream.log4j.HelloLog4j.main(HelloLog4j.java:20) -This is error message.

【示例6】 多目的地、自定义样式

  1. #设置级别和目的地
  2. log4j.rootLogger=debug,appender1,appender2
  3. #输出到控制台
  4. log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  5. #设置输出样式
  6. log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
  7. #自定义样式
  8. # %r 时间 0
  9. # %t 方法名 main
  10. # %p 优先级 DEBUG/INFO/ERROR
  11. # %c 所属类的全名(包括包名)
  12. # %l 发生的位置,在某个类的某行
  13. # %m 输出代码中指定的讯息,如log(message)中的message
  14. # %n 输出一个换行符号
  15. log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n
  16. #输出到文件(这里默认为追加方式)
  17. log4j.appender.appender2=org.apache.log4j.FileAppender
  18. #设置文件输出路径
  19. #【1】文本文件
  20. log4j.appender.appender2.File=c:/Log4JDemo06.log
  21. #设置文件输出样式
  22. log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
  23. log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
#设置级别和目的地
log4j.rootLogger=debug,appender1,appender2 #输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#设置输出样式
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
#自定义样式
# %r 时间 0
# %t 方法名 main
# %p 优先级 DEBUG/INFO/ERROR
# %c 所属类的全名(包括包名)
# %l 发生的位置,在某个类的某行
# %m 输出代码中指定的讯息,如log(message)中的message
# %n 输出一个换行符号
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n #输出到文件(这里默认为追加方式)
log4j.appender.appender2=org.apache.log4j.FileAppender
#设置文件输出路径
#【1】文本文件
log4j.appender.appender2.File=c:/Log4JDemo06.log
#设置文件输出样式
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n

【示例7】 【企业应用】设置
特定包的级别和目的地

先增加一个包,新建一个类:

  1. package com.coderdream.log4jDao;
  2. import org.apache.log4j.Logger;
  3. public class HelloDao {
  4. private static Logger logger = Logger.getLogger(HelloDao.class);
  5. /**
  6. * @param args
  7. */
  8. public static void main(String[] args) {
  9. // 记录debug级别的信息
  10. logger.debug("This is debug message from Dao.");
  11. // 记录info级别的信息
  12. logger.info("This is info message from Dao.");
  13. // 记录error级别的信息
  14. logger.error("This is error message from Dao.");
  15. }
  16. }
package com.coderdream.log4jDao;

import org.apache.log4j.Logger;

public class HelloDao {
private static Logger logger = Logger.getLogger(HelloDao.class); /**
* @param args
*/
public static void main(String[] args) {
// 记录debug级别的信息
logger.debug("This is debug message from Dao.");
// 记录info级别的信息
logger.info("This is info message from Dao.");
// 记录error级别的信息
logger.error("This is error message from Dao.");
}
}

      如果这个类作为基类,如J2EE中的BaseDao、BaseAction、BaseService等等,则我们可以将各层的日志信息分类输出到各个文件。

  1. #省略根,只设置特定包的级别和目的地
  2. log4j.logger.com.coderdream.log4j=debug,appender1
  3. log4j.logger.com.coderdream.log4jDao=info,appender1,appender2
  4. #输出到控制台
  5. log4j.appender.appender1=org.apache.log4j.ConsoleAppender
  6. #设置输出样式
  7. log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
  8. #自定义样式
  9. # %r 时间 0
  10. # %t 方法名 main
  11. # %p 优先级 DEBUG/INFO/ERROR
  12. # %c 所属类的全名(包括包名)
  13. # %l 发生的位置,在某个类的某行
  14. # %m 输出代码中指定的讯息,如log(message)中的message
  15. # %n 输出一个换行符号
  16. log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n
  17. #输出到文件(这里默认为追加方式)
  18. log4j.appender.appender2=org.apache.log4j.FileAppender
  19. #设置文件输出路径
  20. #【1】文本文件
  21. log4j.appender.appender2.File=c:/Log4JDemo07_Dao.log
  22. #设置文件输出样式
  23. log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
  24. log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n
#省略根,只设置特定包的级别和目的地
log4j.logger.com.coderdream.log4j=debug,appender1
log4j.logger.com.coderdream.log4jDao=info,appender1,appender2 #输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#设置输出样式
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
#自定义样式
# %r 时间 0
# %t 方法名 main
# %p 优先级 DEBUG/INFO/ERROR
# %c 所属类的全名(包括包名)
# %l 发生的位置,在某个类的某行
# %m 输出代码中指定的讯息,如log(message)中的message
# %n 输出一个换行符号
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%C-%M] %m%n #输出到文件(这里默认为追加方式)
log4j.appender.appender2=org.apache.log4j.FileAppender
#设置文件输出路径
#【1】文本文件
log4j.appender.appender2.File=c:/Log4JDemo07_Dao.log
#设置文件输出样式
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=[%d{HH:mm:ss:SSS}][%C-%M] -%m%n

【示例8】 log4j.xml的配置方式

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
  3. <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  4. <appender name="appender1"
  5. class="org.apache.log4j.RollingFileAppender">
  6. <param name="File" value="logfile08.html" />
  7. <param name="MaxFileSize" value="1MB" />
  8. <param name="MaxBackupIndex" value="5" />
  9. <layout class="org.apache.log4j.HTMLLayout">
  10. </layout>
  11. </appender>
  12. <root>
  13. <level value="debug" />
  14. <appender-ref ref="appender1" />
  15. </root>
  16. </log4j:configuration>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="appender1"
class="org.apache.log4j.RollingFileAppender">
<param name="File" value="logfile08.html" />
<param name="MaxFileSize" value="1MB" />
<param name="MaxBackupIndex" value="5" />
<layout class="org.apache.log4j.HTMLLayout">
</layout>
</appender> <root>
<level value="debug" />
<appender-ref ref="appender1" />
</root>
</log4j:configuration>

为了提高效率,我们可以在写日志前增加判断:

  1. // 记录debug级别的信息
  2. if (logger.isDebugEnabled()) {
  3. logger.debug("This is debug message from Dao.");
  4. }
  5. // 记录info级别的信息
  6. if (logger.isInfoEnabled()) {
  7. logger.info("This is info message from Dao.");
  8. }
  9. // 记录error级别的信息
  10. logger.error("This is error message from Dao.");
// 记录debug级别的信息
if (logger.isDebugEnabled()) {
logger.debug("This is debug message from Dao.");
} // 记录info级别的信息
if (logger.isInfoEnabled()) {
logger.info("This is info message from Dao.");
} // 记录error级别的信息
logger.error("This is error message from Dao.");

参考资料:

1、log4j 详
解( 一)

2、log4j 详解(二)

3、Log4j基本使用方法

4、Log4j 用法(一)

5、log4j.properties 使用说明

6、Apache Log4j详解

7、log4j.xml配置详解

8、log4j.xml配置详解

log4j详解与实战的更多相关文章

  1. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(上)

    前言 Android中绘图离不开的就是Canvas了,Canvas是一个庞大的知识体系,有Java层的,也有jni层深入到Framework.Canvas有许多的知识内容,构建了一个武器库一般,所谓十 ...

  2. Android为TV端助力 转载:Android绘图Canvas十八般武器之Shader详解及实战篇(下)

    LinearGradient 线性渐变渲染器 LinearGradient中文翻译过来就是线性渐变的意思.线性渐变通俗来讲就是给起点设置一个颜色值如#faf84d,终点设置一个颜色值如#CC423C, ...

  3. 【转载】log4j详解使用

    log4j详解 日志论    在应用程序中输出日志有有三个目的:(1)监视代码中变量的变化情况,把数据周期性地记录到文件中供其他应用进行统计分析工作. (2)跟踪代码运行进轨迹,作为日后审计的依据.  ...

  4. (转)sudo配置文件/etc/sudoers详解及实战用法

    sudo配置文件/etc/sudoers详解及实战用法 原文:http://blog.csdn.net/field_yang/article/details/51547804 一.sudo执行命令的流 ...

  5. Java8 Stream新特性详解及实战

    Java8 Stream新特性详解及实战 背景介绍 在阅读Spring Boot源代码时,发现Java 8的新特性已经被广泛使用,如果再不学习Java8的新特性并灵活应用,你可能真的要out了.为此, ...

  6. 【半小时大话.net依赖注入】(下)详解AutoFac+实战Mvc、Api以及.NET Core的依赖注入

    系列目录 上|理论基础+实战控制台程序实现AutoFac注入 下|详解AutoFac+实战Mvc.Api以及.NET Core的依赖注入 前言 本来计划是五篇文章的,每章发个半小时随便翻翻就能懂,但是 ...

  7. Log4J详解

    Log4J 简介  Log4j有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局).这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出.综合使 ...

  8. Thymeleaf3语法详解和实战

    Thymeleaf3语法详解 Thymeleaf是Spring boot推荐使用的模版引擎,除此之外常见的还有Freemarker和Jsp.Jsp应该是我们最早接触的模版引擎.而Freemarker工 ...

  9. AutoLayout详解+手把手实战(转载)

    首先说一下这篇博客虽然是标记为原创,但是事实并非本人亲自写出来的,知识点和例子本人花了一天各处查 找和整理最终决定写一个汇总的详解,解去各位朋友到处盲目查找的必要,因为不是转载某一个人的内容,故此不标 ...

随机推荐

  1. 嵌入式Qt开发环境的搭建详解

    一.嵌入式Qt开发环境的搭建前奏 1.下载arm-linux-gcc-4.4.3-20100728.tar.gz 2.下载qt-everywhere-opensource-src-4.8.5.tar. ...

  2. 2.Books

    Books示例说明了Qt中SQL类如何被Model/View框架使用,使用数据库中存储的信息,创建丰富的用户界面. 首先介绍使用SQL我们需要了解的类: 1.QSqlDatabase: QSqlDat ...

  3. arcconf工具相关命令V1.0

    arcconf工具相关命令V1.0 清除当前所有raid配置 Arcconf  delete  1  array  all       #删除所有逻辑盘 Arcconf  uninit  1  all ...

  4. 课后练习Javascript

    <script type="text/javascript"> alert (isNaN(prompt("输入个数字进来","只能输入数字 ...

  5. Linux下启动Tomcat项目

    在Linux下启动Tomcat项目方法:将war包放进Tomcat的wabapp目录下,进入tomcat目中的bin目录中,运行命令./startup.sh 回车就可以了

  6. C# 抽象(2)

    接着上章说: 先看代码 abstract class Human { public abstract void Think(); public abstract int Age { get; set; ...

  7. ubuntu14.04,安装Git(源代码管理工具)

    在shell中执行:sudo apt-get install git-core

  8. python之路径拼接urljoin

    方法一:使用+进行路径拼接 url='http://ip/ path='api/user/login' url+path拼接后的路径为'http://ip//api/user/login' 方法二:使 ...

  9. leecode刷题(2)-- 买卖股票的最佳时机

    买卖股票的最佳时机 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多 ...

  10. Udp 网络字节序

    1.网络上的数据是一个字节一个字节的串行传递的. 2.字节序,规定,在内存里存储时,低字节在前称为小端,高字节在前称为大端,(现在主流系统都是小端的) 3.网络字节序,如果先传高字节,则是大端传输:如 ...