2017-08-01 16:29:00 resunly 阅读数 72
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7170 人正在学习 去看看 良许


[b]说明:[/b] 用spring boot 已经写过一个项目了,第二个项目在搭建框架的时候还是优点懵逼。到处查资料,尤其是数据链接那块。所以成现在有时间还是记录下,即使下次找也只找自己博客的。
太基礎的我要就不說了,搭建springboot的項目框架一定要用maven,除非你想折騰死自己。

在搭建springboot之前還是要比較瞭解springMVC的框架,springboot其實就是又封裝了springMVC,這是基礎,不然會很吃力。

搭建简单的说下-去springboot官网下构建一个springboot的dome,然后导入 IDE,

我喜欢用yml文件的格式,所以更改application文件为yml文件格式。

在application.yml文件中加入服务启动的端口:不加都默认8080

server:
    port: 8090

结构如图:


 方便的不能在方便了。接下来我们说下日志文件的配置:

1.在application.yml中加入日志文件的配置:这里我喜欢用yml文件的格式,大家也可以用perpertites的。

logging:
  config: classpath:logback-spring.xml
  path: /applogs
  level:
    root: info

 说明:

logback-spring.xml是将要在resource下建立的文件,用来配置日志配置文件,类似与之前的log4j的配置文件

path:日志文件生成的目录

level:日志级别

2.在看logback-spring.xml文件的内容,直接贴我的内容:

其中我在日志答应格式中特地吧服务运行的进程ID PID 打印了出来,这样方便直接KILL服务。

其实大家可以去看看springboot jar包下面的原配置文件,如图:



 
logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">

    <property name="LOG_FILE" value="${LOG_PATH}/spring.log"/>
    <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] ${PID:- } %-5level %logger{50} - %msg%n"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,PID:进程ID %-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!-- 文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <Append>true</Append>
        <File>${LOG_FILE}</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
<FileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</FileNamePattern>
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${LOG_PATTERN}</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender><root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>
</configuration>

2013-12-21 13:19:24 wangdongsong1229 阅读数 7069
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7170 人正在学习 去看看 良许

前言

前段时间,将团队框架中的Struts2切换到SpringMVC,做一个系统系统,同时将一些共用组件抽取、独立,团队成员提议使用LogBack记录日志,因之前做的基础组件使用的Log4j,对LogBack不太熟悉,所以自己学习了一下LogBack,学习过程中,发现心仪的中文资料比较少,结合自己开的项目,分享一下LogBack在项目中的应用及自己所遇到的问题。回过头思考使用LogBack的过程,官方文档还是最准确、最完成的学习资源,虽然是英文的,正好此时在翻译一本英文书籍,能静下心去看官方的文档,解决了项目中遇到的一些问题。
项目中使用的LogBack的配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 
	说明:
	1、日志级别及文件
		日志记录采用分级记录,级别与日志文件名相对应,不同级别的日志信息记录到不同的日志文件中
		例如:error级别记录到log_error_xxx.log或log_error.log(该文件为当前记录的日志文件),而log_error_xxx.log为归档日志,
		日志文件按日期记录,同一天内,若日志文件大小等于或大于2M,则按0、1、2...顺序分别命名
		例如log-level-2013-12-21.0.log
		其它级别的日志也是如此。
	2、文件路径
		若开发、测试用,在Eclipse中运行项目,则到Eclipse的安装路径查找logs文件夹,以相对路径../logs。
		若部署到Tomcat下,则在Tomcat下的logs文件中
	3、Appender
		FILEERROR对应error级别,文件名以log-error-xxx.log形式命名
		FILEWARN对应warn级别,文件名以log-warn-xxx.log形式命名
		FILEINFO对应info级别,文件名以log-info-xxx.log形式命名
		FILEDEBUG对应debug级别,文件名以log-debug-xxx.log形式命名
		stdout将日志信息输出到控制上,为方便开发测试使用
 -->
<configuration>
	
	<!-- 在Eclipse中运行,请到Eclipse的安装目录中找log文件,Tomcat下,请到Tomcat目录下找 -->
	<property name="LOG_PATH" value="../logs" />
	
	<!-- 日志记录器,日期滚动记录 -->
	<appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 正在记录的日志文件的路径及文件名 -->
		<file>${LOG_PATH}/log_error.log</file>
		<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
   		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   			<!-- 归档的日志文件的路径,例如今天是2013-12-21日志,当前写的日志文件路径为file节点指定,可以将此文件与file指定文件路径设置为不同路径,从而将当前日志文件或归档日志文件置不同的目录。
   			而2013-12-21的日志文件在由fileNamePattern指定。%d{yyyy-MM-dd}指定日期格式,%i指定索引 -->
   			<fileNamePattern>${LOG_PATH}/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
   			<!-- 除按日志记录之外,还配置了日志文件不能超过2M,若超过2M,日志文件会以索引0开始,
   			命名日志文件,例如log-error-2013-12-21.0.log -->
   			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
       	 		<maxFileSize>2MB</maxFileSize>
    		</timeBasedFileNamingAndTriggeringPolicy>
   		</rollingPolicy>
   		<!-- 追加方式记录日志 -->
		<append>true</append>
		<!-- 日志文件的格式 -->
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%-5p [%d] %C:%L - %m %n</pattern>
			<charset>utf-8</charset>
		</encoder>
		<!-- 此日志文件只记录error级别的 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>error</level>
			<onMatch>ACCEPT</onMatch>
      		<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	<appender name="FILEWARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_PATH}/log_warn.log</file>
   		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   			<fileNamePattern>${LOG_PATH}/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
   			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
       	 		<maxFileSize>2MB</maxFileSize>
    		</timeBasedFileNamingAndTriggeringPolicy>
   		</rollingPolicy>
		<append>true</append>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%-5p [%d] %C:%L - %m %n</pattern>
			<charset>utf-8</charset>
		</encoder>
		<!-- 此日志文件只记录warn级别,不记录大于warn级别的日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>WARN</level>
			<onMatch>ACCEPT</onMatch>
      		<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	<appender name="FILEINFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_PATH}/log_info.log</file>
   		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   			<fileNamePattern>${LOG_PATH}/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
   			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
       	 		<maxFileSize>2MB</maxFileSize>
    		</timeBasedFileNamingAndTriggeringPolicy>
   		</rollingPolicy>
		<append>true</append>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%-5p [%d] %C:%L - %m %n</pattern>
			<charset>utf-8</charset>
		</encoder>
		<!-- 此日志文件只记录info级别,不记录大于info级别的日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>INFO</level>
			<onMatch>ACCEPT</onMatch>
      		<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	
	<appender name="FILEDEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_PATH}/log_debug.log</file>
   		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
   			<fileNamePattern>${LOG_PATH}/log-debug-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
   			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
       	 		<maxFileSize>2MB</maxFileSize>
    		</timeBasedFileNamingAndTriggeringPolicy>
   		</rollingPolicy>
		<append>true</append>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<pattern>%-5p [%d] %C:%L - %m %n</pattern>
			<charset>utf-8</charset>
		</encoder>
		<!-- 此日志文件只记录debug级别,不记录大于debug级别的日志 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
			<level>DEBUG</level>
			<onMatch>ACCEPT</onMatch>
      		<onMismatch>DENY</onMismatch>
		</filter>
	</appender>
	
	<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
		<Target>System.out</Target>
		<encoder>
			<pattern>%-5p [%d] %C:%L - %m %n</pattern>
			<charset>utf-8</charset>
		</encoder>
		<!-- 此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>DEBUG</level>
		</filter>
	</appender>
	<!-- 为单独的包配置日志级别,若root的级别大于此级别, 此处级别也会输出
		应用场景:生产环境一般不会将日志级别设置为trace或debug,但是为详细的记录SQL语句的情况,
		可将hibernate的级别设置为debug,如此一来,日志文件中就会出现hibernate的debug级别日志,
		而其它包则会按root的级别输出日志
	-->
	<logger name="org.hibernate.SQL" level="DEBUG" />
	<logger name="org.hibernate.jdbc" level="DEBUG"/>
	<logger name="org.springframework" level="DEBUG"/>
	
	
	<!-- 生产环境,将此级别配置为适合的级别,以名日志文件太多或影响程序性能 -->
	<root level="INFO">
		<appender-ref ref="FILEDEBUG" />
		<appender-ref ref="FILEINFO" />
		<appender-ref ref="FILEWARN" />
		<appender-ref ref="FILEERROR" />
		<!-- 生产环境将请stdout去掉 -->
		<appender-ref ref="stdout" />
	</root>
</configuration>


LogBack

LogBack是由log4j的创始人开发的一个日志组件,用于替代log4j。LogBack的架构设计足够通用,可适用于不同的环境,目前LogBack分为三个模:lobback-core,logback-classic和logback-access。

core模块是其它两个模块的基础,classic是core的扩展,是log4j巨大改进的版本。LogBack-classic本身实现了SL4J的API,因此可以很容易的在logback与其它日志系统之间转换,例如log4j、JDK1.4中的java.util.logging(JUL)。第三个模块access,它集成了Servlet容器,提供了通过HTTP访问日志的功能,若了解access可访问其独立文档http://logback.qos.ch/access.html

LogBack的日志级别有trace、debug、info、warn、error,关于基级别,可参考官方文档(http://logback.qos.ch/manual/architecture.html)。

配置

LogBack可以通过编程式或以XML、Groovy格式配置,原来使用log4j的用户可以通过属性转换器将log4j.properties转换成logback.xml文件。我在使用这个转换器的时候,能转换成功,但是在Web-App中日志输出的有点小问题,后来就自己写logback.xml文件,LogBack读取配置或属性文件的步骤:
  1. LogBack在类路径下尝试查找logback.groovy的文件。
  2. 如果logback.groovy没有找到,就在类路径下查找logback-test.xml文件。
  3. 若logback-test.xml文件没有找到,就会在类路径下查找logback.xml文件(自己使用的就是这种方式,将logback.xml配置文件放到类路径下)。
  4. 如果都找不到,LogBack就会使用BasicConfigurator启动默认配置,该配置会将日志输出到控制上。
第4步,意味着使用缺省配置,它提供了默认(最基础)的日志功能。
如果使用Maven,可以将logback-test.xml的配置文件置于src/test/resources文件夹下,因此,可以在测试时使用logback-test.xml配置,而在产品中使用logback.xml,这一点,我也木用使用到。我的用法是Web-App中,将logback.xml文件放到了src/main/resources路径下,而在Java-App中,将文件放到src/main/java下,如下图:

Web-App的目录结构图:

Java工程的目录结构图:

Appender

LogBack的日志Appender都必须实现ch.qos.logback.core.Appender接口,常用的有ConsoleAppender、FileAppender和RollingFileAppender,类图如下:


项目中使用的Appender有两种:ConsoleAppender和RollingFileAppender
ConsoleAppender:主要是将日志信息输出到控制上,在上面的日志文件中,stdout的Append就是ConsoleAppender
RollingFileAppender:是按日期滚动记录日志,例如RollingFileAppender将日志记录到log.txt文件中,一旦设置的条件满足,就将日志信息记录到另一个文件中,它继承FileAppender。与RollingFileAppender交互的两个重要组件分别是:RollingPolicy和TriggeringPolicy。前者负责滚动神马,后者负责神马时候滚动。
任何时候使用,RollingFileAppender都必须有RollingFileAppender和TriggeringPolicy的配置,但是如果它的RollingPolicy也实现了TriggeringPolicy接口,只需要指定前者即可。此点需要注意:笔者在使用时,就忽略这一点,导致日志滚动不成功。其具体属性如下:(以项目中使用到的为例 )
  • file:继承自FileAppender,指定日志文件名。
  • append:继承自FileAppender,为true,日志将追加到日志文件的尾部,false将删除已经存在的日志文件,默认为true。
  • encoder:Encoder,指定日志格式及编码
RollingPolicy
TimeBaseRollingPolicy可能是最常用的滚动策略了,它是基于时间的,例如可以以天或月为周期,同时,这个类同时实现了RollingPolicy接口和TriggeringPolicy接口。在RollingFileAppender中只使用这个类就可以了,项目中就是使用的这个RollingPolicy,日期格式由%d{yyyy-MM-dd}指定,%i是索引。具体配置可参考上述的配置文件。RollingPolicy还有一此其它属性,具体可参考官方文档,项目中未使用到,例如最大历史期限等。
LogBack也提供了FixedWindowRollingPolicy,该类未使用,可参考官方文件。
此外,我们还可以根据时间和大小来决定滚动策略,在项目中使用的就是这种类型,项目中使用配置文件可见上述,下面为官方提供的配置文件:
<configuration>
  <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>mylog.txt</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- rollover daily -->
      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
      <timeBasedFileNamingAndTriggeringPolicy
            class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
        <!-- or whenever the file size reaches 100MB -->
        <maxFileSize>100MB</maxFileSize>
      </timeBasedFileNamingAndTriggeringPolicy>
    </rollingPolicy>
    <encoder>
      <pattern>%msg%n</pattern>
    </encoder>
  </appender>


  <root level="DEBUG">
    <appender-ref ref="ROLLING" />
  </root>

</configuration>

TriggeringPolicy
SizeBasedTriggeringPolicy:控制当前文件大小,如果日志文件大于指定的大小,则触发滚动,由maxFileSize属性指定,该值可以取KB、MB、及GB,如下下面的配置文件(官方提供的,未在项目中使用):
<configuration>
  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>test.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
      <fileNamePattern>test.%i.log.zip</fileNamePattern>
      <minIndex>1</minIndex>
      <maxIndex>3</maxIndex>
    </rollingPolicy>

    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
      <maxFileSize>5MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
  </appender>
	
  <root level="DEBUG">
    <appender-ref ref="FILE" />
  </root>
</configuration>

Filter

项目中使用到了LevelFilter和ThresholdFilter两种,官方还提供了其它的Filter可参考。
LevelFilter:基于精确匹配,如果事件的级别与配置的级别相同,则将会根据已经配置的onMatch和onMismatch的属性决定接受或拒绝,如果项目中的使用的配置文件中的FILEERROR、FILEWARN、FILEINFO、FILEDEBUG,下面的配置是官方提供的配置:
<configuration>
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
      <level>INFO</level>
      <onMatch>ACCEPT</onMatch>
      <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
      <pattern>
        %-4relative [%thread] %-5level %logger{30} - %msg%n
      </pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="CONSOLE" />
  </root>
</configuration>

ThresholdFilter:指定下限级别,低于此级别的事件将被拒绝,如果项目中使用的配置文件中的stdout的配置,下面为官方提供的配置:

<configuration>
  <appender name="CONSOLE"
    class="ch.qos.logback.core.ConsoleAppender">
    <!-- deny all events with a level below INFO, that is TRACE and DEBUG -->
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
      <level>INFO</level>
    </filter>
    <encoder>
      <pattern>
        %-4relative [%thread] %-5level %logger{30} - %msg%n
      </pattern>
    </encoder>
  </appender>
  <root level="DEBUG">
    <appender-ref ref="CONSOLE" />
  </root>
</configuration>
官方提供了其它的Filter,也可以自己实现自己的Filter,具体参考官方文档。

问题

1、路径
这个问题在配置文件中做了详细的注释,请参考。
2、关于Spring或其它已经使用了log4j、common-logging或java.util.longging的集成
LogBack提供了jcl-over-slf4j和jul-to-slf4j,jcl是指common-logging,jul指java.utils.longging,如果需要将Spring的日志统一处理,就需要将jcl-over-slf4j的包加入到工作中,项目中使用Maven开发,依赖如下:
<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-core</artifactId>
			<version>1.0.13</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-classic</artifactId>
			<version>1.0.13</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>1.7.0</version>
		</dependency>
		<dependency>
			<groupId>ch.qos.logback</groupId>
			<artifactId>logback-access</artifactId>
			<version>1.0.13</version>
		</dependency>
3、代码区别
源写法:
if (logger.isInfoEnabled()) {
	logger.info("***** BaseAuthoritiesResourcesServiceImpl.getList() method begin*****");
}
使用LogBack之后,可将if判断去掉,如下:
logger.debug("***** BaseDictionaryServiceImpl.delete() method begin*****");
如果日志级别高于Debug,则这一行日志信息将不会输出。

2016-05-05 15:59:09 worldzhy 阅读数 1554
  • 玩转Linux:常用命令实例指南

    本课程以简洁易懂的语言手把手教你系统掌握日常所需的Linux知识,每个知识点都会配合案例实战让你融汇贯通 。课程通俗易懂,简洁流畅,适合0基础以及对Linux掌握不熟练的人学习; 注意: 1、本课程原价99元,现在仅需29元!购课就送5门价值300元的编程课! 2、购课后登陆csdn学院官网,在课程目录页面即可下载课件。 学完即可轻松应对工作中 85% 以上的 Linux 使用场景 【限时福利】 1)购课后按提示添加小助手,进答疑群,还可获得价值300元的编程大礼包! 2)本课程【现在享受秒杀价39元】 3)本月购买此套餐加入老师答疑交流群,可参加老师的免费分享活动,学习最新技术项目经验。 注意: 1)现在购买至少享受60元优惠; 2)购课后添加微信eduxy-1,发送订单截图领取300元编程礼包。 --------------------------------------------------------------- 这门课程,绝对不会让你觉得亏! 29元=掌握Linux必修知识+社群答疑+讲师社群分享会+300元编程礼包。   人工智能、物联网、大数据时代,Linux正有着一统天下的趋势,几乎每个程序员岗位,都要求掌握Linux。本课程零基础也能轻松入门。   在这门课中,我们保证你能收获到这些 1)快速掌握 Linux 常用命令及配置 2)Linux核心知识点 3) 文件、进程、磁盘、用户管理,以及网络工具命令、文件传输等 4)Vi/Vim编辑器用法  

    7170 人正在学习 去看看 良许

http://www.gurustop.net/blog/2015/11/11/ionic-run-does-nothing-no-error-cordova-nodejs-5


npm install -g npm
npm uninstall -g cordova
npm uninstall -g ionic
npm cache clean
npm install ionic
npm install cordova

It works! 

Thanks for the blog.

没有更多推荐了,返回首页