在上一篇Log4net(日志文件篇)中,我们使用“log4net.Appender.FileAppender”将日志信息输出到一个单一的文件中,随着应用程序的持续使用,该日志文件会越来越庞大,进而影响系统的性能。因此,有必要对日志文件按某种条件进行切分,要切分日志文件,我们可以使用“log4net.Appender.RollingFileAppender”输出源,使用该输出源我们可以按照文件大小或者日期对日志文件进行切分,下面我们分别描述之。

一、按文件大小切分日志文件

  想要按文件大小切分日志文件只需要在Log4net.config配置文件中添加一个appender节点,然后在root节点中添加一个对新添加的appender节点的引用即可。Log4net.config的配置信息如下所示:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<!-- 将日志输出到控制台 -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 将日志写到文件中 -->
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径-->
<file value="Logs/FileAppender.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 将日志以回滚文件的形式写到文件中 -->
<!-- 按文件大小切分日志文件 -->
<appender name="RollingFileAppenderBySize" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径-->
<file value="Logs/RollingFileAppenderBySize.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按文件大小切分日志文件 -->
<rollingStyle value="Size" />
<!-- 指定备份日志文件的最大切分数量,如果超过指定切分文件个数,日志将进行覆写 -->
<maxSizeRollBackups value="5" />
<!-- 指定每个切分日志文件的大小 -->
<maximumFileSize value="1KB" />
<!-- 指定每个切分文件具有相同的名字 -->
<!-- 日志文件进行切分后,每个日志文件的名字分别为:RollingFileAppenderBySize.log, RollingFileAppenderBySize.log.1, ..., RollingFileAppenderBySize.log.5 -->
<staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <root>
<!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
<!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
<!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
<level value="ALL" />
<!-- 将日志输出到控制台 -->
<appender-ref ref="ConsoleAppender" />
<!-- 将日志写到文件中 -->
<appender-ref ref="FileAppender" />
<!-- 按文件大小切分日志文件 -->
<appender-ref ref="RollingFileAppenderBySize" />
</root>
</log4net>
</configuration>

  将上述配置文件保存,然后多次运行程序,生成的日志文件如下所示:

  大家可能已经注意到了,一共有6个日志文件,其中有5个是备份文件,也就是说,如果我们设置“<maxSizeRollBackups value="5" />”,那么意思是我们将备份文件的数量设置为5。

二、按日期切分日志文件

  想要按日期切分日志文件只需要在Log4net.config配置文件中添加一个appender节点,然后在root节点中添加一个对新添加的appender节点的引用即可。Log4net.config的配置信息如下所示:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<!-- 将日志输出到控制台 -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 将日志写到文件中 -->
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径-->
<file value="Logs/FileAppender.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 将日志以回滚文件的形式写到文件中 -->
<!-- 按文件大小切分日志文件 -->
<appender name="RollingFileAppenderBySize" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径-->
<file value="Logs/RollingFileAppenderBySize.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按文件大小切分日志文件 -->
<rollingStyle value="Size" />
<!-- 指定备份日志文件的最大切分数量,如果超过指定切分文件个数,日志将进行覆写 -->
<maxSizeRollBackups value="5" />
<!-- 指定每个切分日志文件的大小 -->
<maximumFileSize value="1KB" />
<!-- 指定每个切分文件具有相同的名字 -->
<!-- 日志文件进行切分后,每个日志文件的名字分别为:RollingFileAppenderBySize.log, RollingFileAppenderBySize.log.1, ..., RollingFileAppenderBySize.log.5 -->
<staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 按日期切分日志文件 -->
<appender name="RollingFileAppenderByDate" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径-->
<file value="Logs/RollingFileAppenderByDate.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 每分钟切分一个日志文件 -->
<!-- 每天切分一个日志文件的写法为:"yyyyMMdd" -->
<datePattern value="yyyyMMdd-HHmm" />
<!-- 指定每个切分文件具有相同的名字 -->
<staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <root>
<!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
<!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
<!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
<level value="ALL" />
<!-- 将日志输出到控制台 -->
<appender-ref ref="ConsoleAppender" />
<!-- 将日志写到文件中 -->
<appender-ref ref="FileAppender" />
<!-- 按文件大小切分日志文件 -->
<appender-ref ref="RollingFileAppenderBySize" />
<!-- 按日期切分日志文件 -->
<appender-ref ref="RollingFileAppenderByDate" />
</root>
</log4net>
</configuration>

  每隔一分钟运行一次应用程序,生成的日志文件如下所示:

 三、按日期切分日志文件,并以日期作为日志文件名

  如果我们想以日期切分日志文件,并且以日期作为日志文件名,我们可以在Log4net.config配置文件中添加一个appender节点,然后在root节点中添加一个对新添加的appender节点的引用即可。Log4net.config的配置信息如下所示:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<!-- 将日志输出到控制台 -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 将日志写到文件中 -->
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径-->
<file value="Logs/FileAppender.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 将日志以回滚文件的形式写到文件中 -->
<!-- 按文件大小切分日志文件 -->
<appender name="RollingFileAppenderBySize" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径-->
<file value="Logs/RollingFileAppenderBySize.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按文件大小切分日志文件 -->
<rollingStyle value="Size" />
<!-- 指定备份日志文件的最大切分数量,如果超过指定切分文件个数,日志将进行覆写 -->
<maxSizeRollBackups value="5" />
<!-- 指定每个切分日志文件的大小 -->
<maximumFileSize value="1KB" />
<!-- 指定每个切分文件具有相同的名字 -->
<!-- 日志文件进行切分后,每个日志文件的名字分别为:RollingFileAppenderBySize.log, RollingFileAppenderBySize.log.1, ..., RollingFileAppenderBySize.log.5 -->
<staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 按日期切分日志文件 -->
<appender name="RollingFileAppenderByDate" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Logs/RollingFileAppenderByDate.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 每分钟切分一个日志文件 -->
<!-- 每天切分一个日志文件的写法为:"yyyyMMdd" -->
<datePattern value="yyyyMMdd-HHmm" />
<!-- 指定每个切分文件具有相同的名字 -->
<staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<appender name="RollingFileAppenderNameByDate" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Logs/" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 日志文件的命名规则 -->
<datePattern value="&quot;Logs_&quot;yyyyMMdd-HHmm&quot;.log&quot;" />
<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
<staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <root>
<!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
<!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
<!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
<level value="ALL" />
<!-- 将日志输出到控制台 -->
<appender-ref ref="ConsoleAppender" />
<!-- 将日志写到文件中 -->
<appender-ref ref="FileAppender" />
<!-- 按文件大小切分日志文件 -->
<appender-ref ref="RollingFileAppenderBySize" />
<!-- 按日期切分日志文件 -->
<appender-ref ref="RollingFileAppenderByDate" />
<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<appender-ref ref="RollingFileAppenderNameByDate" />
</root>
</log4net>
</configuration>

  多次运行应用程序,生成的日志如下所示:

四、既按大小又按日期切分日志文件

  如果想既按大小又按日期切分日志文件,只需要将“rollingStyle”的值设置为“Composite”即可,具体配置文件如下所示:

 <?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections> <log4net>
<!-- 将日志输出到控制台 -->
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 将日志写到文件中 -->
<appender name="FileAppender" type="log4net.Appender.FileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Logs/FileAppender.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 将日志以回滚文件的形式写到文件中 -->
<!-- 按文件大小切分日志文件 -->
<appender name="RollingFileAppenderBySize" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Logs/RollingFileAppenderBySize.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按文件大小切分日志文件 -->
<rollingStyle value="Size" />
<!-- 指定备份日志文件的最大切分数量,如果超过指定切分文件个数,日志将进行覆写 -->
<maxSizeRollBackups value="5" />
<!-- 指定每个切分日志文件的大小 -->
<maximumFileSize value="1KB" />
<!-- 指定每个切分文件具有相同的名字 -->
<!-- 日志文件进行切分后,每个日志文件的名字分别为:RollingFileAppenderBySize.log, RollingFileAppenderBySize.log.1, ..., RollingFileAppenderBySize.log.5 -->
<staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 按日期切分日志文件 -->
<appender name="RollingFileAppenderByDate" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Logs/RollingFileAppenderByDate.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 每分钟切分一个日志文件 -->
<!-- 每天切分一个日志文件的写法为:"yyyyMMdd" -->
<datePattern value="yyyyMMdd-HHmm" />
<!-- 指定每个切分文件具有相同的名字 -->
<staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<appender name="RollingFileAppenderNameByDate" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Logs/" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定按日期切分日志文件 -->
<rollingStyle value="Date" />
<!-- 日志文件的命名规则 -->
<datePattern value="&quot;Logs_&quot;yyyyMMdd-HHmm&quot;.log&quot;" />
<!-- 当将日期作为日志文件的名字时,必须将staticLogFileName的值设置为false -->
<staticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <!-- 既按大小又按日期切分日志文件 -->
<appender name="RollingFileAppenderBySizeAndDate" type="log4net.Appender.RollingFileAppender">
<!-- 日志文件存放位置,可以为绝对路径也可以为相对路径 -->
<file value="Logs/RollingFileAppenderBySizeAndDate.log" />
<!-- 将日志信息追加到已有的日志文件中-->
<appendToFile value="true" />
<!-- 最小锁定模式,以允许多个进程可以写入同一个文件 -->
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 指定既按大小又按日期切分日志文件 -->
<rollingStyle value="Composite" />
<!-- 指定备份日志文件的最大切分数量,如果超过指定切分文件个数,日志将进行覆写 -->
<maxSizeRollBackups value="5" />
<!-- 指定每个切分日志文件的大小 -->
<maximumFileSize value="1KB" />
<!-- 每分钟切分一个日志文件 -->
<!-- 每天切分一个日志文件的写法为:"yyyyMMdd" -->
<datePattern value="yyyyMMdd-HHmm" />
<!-- 指定每个切分文件具有相同的名字 -->
<staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender> <root>
<!-- 控制级别,由低到高:ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF -->
<!-- 比如定义级别为INFO,则INFO级别向下的级别,比如DEBUG日志将不会被记录 -->
<!-- 如果没有定义LEVEL的值,则缺省为DEBUG -->
<level value="ALL" />
<!-- 将日志输出到控制台 -->
<appender-ref ref="ConsoleAppender" />
<!-- 将日志写到文件中 -->
<appender-ref ref="FileAppender" />
<!-- 按文件大小切分日志文件 -->
<appender-ref ref="RollingFileAppenderBySize" />
<!-- 按日期切分日志文件 -->
<appender-ref ref="RollingFileAppenderByDate" />
<!-- 按日期切分日志文件,并将日期作为日志文件的名字 -->
<appender-ref ref="RollingFileAppenderNameByDate" />
<!-- 既按大小又按日期切分日志文件 -->
<appender-ref ref="RollingFileAppenderBySizeAndDate" />
</root>
</log4net>
</configuration>

  多次运行应用程序,生成的日志文件如下所示:

Log4net入门(回滚日志文件篇)的更多相关文章

  1. python logging 实现的进程安全的文件回滚日志类

    python标准库中的logging模块在记录日志时经常会用到,但在实际使用发现它自带的用于本地日志回滚的类 logging.handlers.RotatingFileHandler 在多进程环境下会 ...

  2. MySQL中的重做日志(redo log),回滚日志(undo log),以及二进制日志(binlog)的简单总结

    MySQL中有六种日志文件,分别是:重做日志(redo log).回滚日志(undo log).二进制日志(binlog).错误日志(errorlog).慢查询日志(slow query log).一 ...

  3. mysql回滚日志

    一.回滚日志(undo log) 1.作用 保存了事务发生之前的数据的一个版本,可以用于回滚,同时可以提供多版本并发控制下的读(MVCC),也即非锁定读 2.内容 逻辑格式的日志,在执行undo的时候 ...

  4. log4net生成多个日志文件

    使用Log4Net日志组件时,经常会碰到这样一种场景,我想把错误的日志记录在Error.log文件中,而把操作的日志放在Operation.log文件中 经过几番尝试,终于实现了,在此把Log4Net ...

  5. [转]SQLServer添加UPDATE回滚日志(update/delete/insert)

    下面直接上代码(copy到你的数据库里面直接就可以运行): CREATE PROCEDURE [dbo].[SP_UPDATE_LOG] ) AS BEGIN SET NOCOUNT ON; IF N ...

  6. Log4net入门(日志文件篇)

    在上一篇Log4net入门(控制台篇)中,我们将日志信息输出到控制台中,在这一篇中,我们将描述如何将日志信息写到文件中.要将日志信息写入文件非常简单,只需要在Log4net.config配置文件中添加 ...

  7. eclipse,myeclipse 误删文件,回滚历史文件操作

    昨天因为误操作把一个写了一上午的代码给删了,找到的这个,以前竟然还没发现有这个功能- -! 具体操作: 1.建立同路径同名的文件 2.文件上右键 --> Compare With --> ...

  8. git回滚部分文件到某个版本

    reset 命令只能将整个版本的代码一起回滚,需要使用checkout 命令,可以还原部分文件到某一版本 格式为:git checkout [<branch>] [file] 1.首先使用 ...

  9. C# 开发 Windows 服务 使用Log4net 组件 不能生成日志文件

    使用VS2012开发Windows服务,需要使用Log4net日志组件记录业务情况,但是始终生成不了日志文件. /// <summary> /// 入口方法 /// </summar ...

随机推荐

  1. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  2. gentoo 安装

    加载完光驱后 1进行ping命令查看网络是否通畅 2设置硬盘的标识为GPT(主要用于64位且启动模式为UEFI,还有一个是MBR,主要用于32位且启动模式为bois) parted -a optima ...

  3. MVVM模式和在WPF中的实现(二)数据绑定

    MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

  4. 简单有效的kmp算法

    以前看过kmp算法,当时接触后总感觉好深奥啊,抱着数据结构的数啃了一中午,最终才大致看懂,后来提起kmp也只剩下“奥,它是做模式匹配的”这点干货.最近有空,翻出来算法导论看看,原来就是这么简单(先不说 ...

  5. 浅谈java异常[Exception]

    学习Java的同学注意了!!! 学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:589809992 我们一起学Java! 一. 异常的定义 在<java编程思想 ...

  6. TemplateMethod(模块方法模式)

    /** * 模块模式 * @author TMAC-J * 将一个完整的算法分离,分成不同的模块 * 用于有很多步骤的时候,可能以后这些步骤还会增加,把这些步骤分离 * 将有共性的部分放在抽象类中 * ...

  7. eclipse — 导入android项目后识别成java项目的问题及解决

    最近在eclipse导入android项目的时候遇到了奇葩问题,再此记录 遇到的问题就是:将完好的android项目导入到eclipse的时候,原本这是一个很容易的事情,但是导入成功后发现,,,靠ec ...

  8. Android中的flexboxlayout布局

    提到FlexboxLayout大家估计有点模糊,它是谷歌最近开源的一个android排版库,它的前身Flexbox是2009年W3C提出了一种新的布局,可以简便.完整.响应式的实现页面布局,Flexb ...

  9. 编译器开发系列--Ocelot语言5.表达式的有效性检查

    本篇将对"1=3""&5"这样无法求值的不正确的表达式进行检查. 将检查如下这些问题.●为无法赋值的表达式赋值(例:1 = 2 + 2)●使用非法的函数 ...

  10. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...