安卓初级搬砖工一站式搭建Logan笔记

2,574 阅读4分钟

环境:
本机: Windows 10
服务器:Ubuntu 16.04
AS:Android Studio Dolphin
IDEA:2023.2

参考文档:
github.com/Meituan-Dia…

搭建Android日志系统 美团点评大前端Logan入门指南

IDEA中打包JavaWeb文件(war),并部署在Tomcat中运行_idea war包部署到tomcat_Shen-Childe的博客-CSDN博客

blog.csdn.net/today__pres…

一.准备工作

1.现在项目文件到本地

git clone https://github.com/Meituan-Dianping/Logan.git

2.安装IDEA(需要重启电脑)

www.jetbrains.com/idea/downlo…

二.打开Android demo试试

如果不想跑demo,想直接集成到自己项目里,直接依赖打包好的库即可

implementation 'com.dianping.android.sdk:logan:1.2.4'

使用方法见README文件:

github.com/Meituan-Dia…

如果想直接集成来用,下面内容可以跳过

demo在Logan项目里,路径为Logan\Example\Logan-Android,使用AS打开

项目使用的是gradle-3.3,等等它下载好

为了加快构建速度,build.gradle文件里加上阿里云和其他的maven库吧

repositories {
        maven {
            url 'https://maven.aliyun.com/repository/public/'
        }
        mavenCentral()
        google()
        jcenter()
        maven {
            url 'https://maven.google.com/'
            name 'Google'
        }
    }

同步项目

依赖下载完之后,报错了,Failed to find target with hash string 'android-23'

缺少android 23的 SDK,安装一下:

还缺少 Build Tool 25.0.2,继续安装:

缺NDK,查一下需要的NDK版本:

继续安装NDK

github.com/android/ndk…

将下载的ndk的zip包解压到 sdk/ndk目录下

修改项目local.properties文件配置ndk路径:

sdk.dir=C:\Android\sdk
ndk.dir=C:\Android\sdk\ndk\android-ndk-r16b

打开logan/build.gradle,看看logan支持那些架构,删掉x86,加快后面编译速度:

cmake {
    arguments '-DBUILD_TESTING=OFF', '-DANDROID_TOOLCHAIN=gcc'
    cFlags "-std=c11"
    abiFilters 'armeabi-v7a', 'arm64-v8a'/*, 'armeabi', 'x86', 'x86_64'*/
}

缺少CMake,继续装:

同步下项目,又是一通依赖下载和编译,弹框跟我说android gradle plugin版本跟我的AS不兼容,点begin upgrade去升级

终于跑起来了:

image.png

三.自己电脑上部署试试

这部分可以跳过,直接看第四部分服务器上部署

1.服务端先本地(Windows 10)跑一下

安装MySQL8.0

安装DBeaver,新建数据库连接连上本地数据库

先创建一个名为logan的数据库:

根据Logan项目中Server/README文件,进行数据库创建(DBeaver - SQL编辑器 - 新建SQL编辑器),在SQL编辑器中输入上SQL创建的命令:

创建好这4个表之后,在DBeaver的logan数据库上右键刷新就可以看到新创建的表

修改项目中数据库配置文件 Server/src/main/resources/db.properties,

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/logan?characterEncoding=UTF8&allowMultiQueries=true&socketTimeout=60000&autoReconnect=true
jdbc.username=root
jdbc.password=12345678

修改log4j.properties

修改日志文件的路径(log4j.appender.R.File这一行):

log4j.rootLogger=ERROR,R,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
// 改下面这一行
log4j.appender.R.File=D:/test/logan.log
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[TS] %p %t %c - %m%n

项目没法运行怎么办:

设置一个配置,里面选Maven

Command Line填入 tomcat7:run

编辑pom.xml文件新增tomcat7插件:

<plugin>
  <groupId>org.apache.tomcat.maven</groupId>
  <artifactId>tomcat7-maven-plugin</artifactId>
  <version>2.2</version>
  <configuration>
    <port>8888</port>
  </configuration>
</plugin>

加载pom文件最后

重新加载maven项目:

此时点IDEA的绿色三角形运行项目

IDEA的Log会输入如下(要记住这个地址下面还会用到):

浏览器中输入:http://localhost:8888/logan-web/,浏览器显示 hello, logan ,运行成功。

2.在本机上跑一下Logan的Web页面(这部分可以不用跟着操作,看一遍即可)

Logan中Web页面的项目目录是Logan/LoganSite

项目下的README文件有写本地运行步骤和不同服务器部署的步骤。

先看看要求

版本号上有个^符号,这个意思是大于等于当前版本但是小于下个大版本:

Node版本要 >= 10.15.3 且 < 11.0.0

npm版本要 >=6.12.0 且 < 7.0.0

yarn版本要 >=1.15.2 且 < 2.0.0

我的电脑之前安装过nodejs,版本并不满足要求,

所以把本地的nodejs卸载了,安装nvm(node版本管理工具),下载nvm-setup.exe安装在D盘

安装方式:blog.csdn.net/youhebuke22…

下载地址:github.com/coreybutler…

安装完成之后,设置一下淘宝源

安装合适版本的node和npm:

nvm install 10.24.1
nvm use 10.24.1

这个版本的node对应的npm为6.14.12,安装了node之后会默认也按安装好npm

我们只看本地运行的

目录下创建文件.env.development,填入

上面log中打印的地址:

API_BASE_URL=http://localhost:8888/logan-web

CMD中启动项目:

$ cd C:\Projects\Logan\Logan\LoganSite
$ npm install
$ npm run start

刷新Logan的web页面,服务器报错:

网上搜索了下,是MySQL时区问题,在db.properties的url加上时区参数即可:serverTimezone=GMT%2B8:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/logan?characterEncoding=UTF8&allowMultiQueries=true&socketTimeout=60000&autoReconnect=true&serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=12345678

再重新跑一下服务器代码

3.发个日志试试

回到AS,继续改造Android Demo的代码,修改MainActivity中的上报地址url:

http://172.16.88.160:8888/logan-web/logan/upload.json

这里是 http协议,我本机的ip地址+服务器的端口号

demo跑起来,记得手机和电脑在同一个局域网下面,点击按钮”测试LOGAN默认上报方式“,AS的Log中可以看到上传成功了:

刷新Web页面,也出现了一条新的日志:

四.服务器部署

上面跑通了流程,下面正式开干了,往服务器上部署服务端和WebSite。

1.部署服务端

方案:将本地的配置改一改,打成war包上传到服务器上运行

服务器安装和配置Tomcat8

 sudo apt-get install tomcat8 tomcat8-docs tomcat8-examples tomcat8-admin

配置管理员权限:

<role rolename="manager-gui"/> 
<role rolename="admin-gui"/> 
<user username="root" password="123456" roles="manager-gui,admin-gui"/>

tomcat常用命令:

 #启动 
service tomcat8 start
#状态 
service tomcat8 status
#停止 
service tomcat8 stop
#重启
service tomcat8 restart
#卸载
sudo apt-get autoremove tomcat8

Tomcat启动后要查询下占用的端口号:

ps -ef | grep tomcat

查询下tomcat的PID

sudo netstat -anop

根据PID找到端口号

还有个要注意的就是端口号,如果有其他的服务在跑占用了8080(比如我的Jenkins就用的这个端口),那就需要修改tomcat默认的端口号:

默认配置文件在这个路径下:

/var/lib/tomcat8/conf的server.xml文件,端口号改成没有被占用的

tomcat运行后,在浏览器输入ip+端口号,就可以看看tomcat是否正常运行。

安装和配置MySQL

sudo apt install mysql-server

登录:

sudo mysql -u root -p

下面都是在MySQL命令行中操作:

#显示数据库:
show databases;
#创建数据库:
create database logan;
#使用数据库:
use logan
#显示当前数据库表
show tables;
#接下来,将服务端创建数据库的命令复制,创建4个数据库表
CREATE TABLE ...
#退出mysql
quit;

需要配置配置MySQL可以远程访问的话,可以参考下面文章(不用更换密码,设置成可以远程连接之后重启mysql):

blog.csdn.net/qq_39724355…

服务器使用的MySQL版本是5.7,tomcat总是报错无法连接,日志里报了SSL警告,url参数加上useSSL=false就好了,不知道什么原因。

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/logan?characterEncoding=UTF8&allowMultiQueries=true&socketTimeout=60000&autoReconnect=true&useSSL=false
jdbc.username=root
jdbc.password=12345678

部署war包

修改下项目中log地址,改成服务器地址

参考下面文章将项目打成war包:

IDEA中打包JavaWeb文件(war),并部署在Tomcat中运行_idea war包部署到tomcat_Shen-Childe的博客-CSDN博客

Ubuntu上tomcat的webapp目录默认在 /var/lib/tomcat9/webapps/

将生成的war包通过FinalShell传到这个目录下面,重启tomcat。

如何重新更换war包:

运行出错了需要更换war包,将服务器这个war包删除,并将同名文件夹也删掉即可。

浏览器输入下面网址,可以进入tomcat的管理网页:

http://192.168.88.74:8081/manager/html

这里可以看到我们部署的logan成功了,路径是/logan-web_war,那么我们logan服务器的地址就是:

http://192.168.88.74:8081/logan-web_war

如果想查看Tomcat的日志,可以用以下命令:

tail -f /var/lib/tomcat8/logs/catalina.out

修改Android demo发送日志试试,发现Logcat中报错:

日志上传结果, http状态码: 200, 详细: {"code":500,"msg":"ERROR_DATABASE","data":null}

在服务端代码里加日志发现是没有文件夹权限导致,咱也不知道怎么弄,直接创建好文件夹:

直接创建好需要的文件夹 /var/lib/tomcat8/logfile,权限也满上777。

2.部署WebSite

服务器也把logan的github项目clone下来

安装nvm(github.com/nvm-sh/nvm#…):

wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.4/install.sh | bash

刷新环境变量

source .bashrc

安装node

nvm install 10.24.1
nvm use 10.24.1

npm切换为国内镜像:

npm config set registry "http://registry.npm.taobao.org/"

(后面的步骤就和上面本机上部署是一样)

项目目录下创建文件.env.development,填入上面查到的tomcat应用地址(localhost记得改成ip)

API_BASE_URL=http://192.168.88.74:8081/logan-web_war

编译和启动项目:

$ cd ~/projects/Logan/Logan/LoganSite/
$ npm install
$ npm run start

上图两个地址就是LoganSite的访问地址。

访问页面正常,但是有弹框报错NetError,打开网页控制台发现报跨域错误

根据这里面的解答:

github.com/Meituan-Dia…

在跨域过滤器里添加上web站点的ip和端口:

重新发布war包,即可解决。

将loganSite打包部署到服务器tomcat:

// 进入项目目录
cd ~/projects/Logan/Logan/LoganSite/
//打包
npm run build
//将打包文件复制到tomcat目录下
cp -r build /var/lib/tomcat8/webapps/
//文件夹重命名
mv /var/lib/tomcat8/webapps/build /var/lib/tomcat8/webapps/logansite

附:

上面的项目只能在内网使用,如果想在外网使用,需要将Logan服务端映射到外网端口,为了安全,将LoganSite项目只能在内网访问。

这里我们给tomcat再开一个端口,单独访问LoganSite即可,这里记得还要修改服务端对跨域请求的设置(CORSFilter.java),将loganSite的地址加到允许列表里,参考以下内容:

blog.csdn.net/qq_34469175…

项目中定义的日志类型: