环境:
本机: 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博客
一.准备工作
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文件:
如果想直接集成来用,下面内容可以跳过
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
将下载的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去升级
终于跑起来了:
三.自己电脑上部署试试
这部分可以跳过,直接看第四部分服务器上部署
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…
安装完成之后,设置一下淘宝源
安装合适版本的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):
服务器使用的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,打开网页控制台发现报跨域错误
根据这里面的解答:
在跨域过滤器里添加上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的地址加到允许列表里,参考以下内容:
项目中定义的日志类型: