diff --git a/application/static/base.js b/application/static/base.js
index 2da5e838..b8f345c3 100644
--- a/application/static/base.js
+++ b/application/static/base.js
@@ -344,9 +344,17 @@ function PopulateMyCustomRss() {
function PopulateMySubscribed() {
var $div = $('#mysubscribed');
$div.empty();
- for (var idx = 0; idx < my_booked_recipes.length; idx++) {
+ var bookNum = my_booked_recipes.length;
+ if (bookNum > 0) {
+ $('#legend_mysubscribed').show();
+ $div.show();
+ } else {
+ $('#legend_mysubscribed').hide();
+ $div.hide();
+ }
+
+ for (var idx = 0; idx < bookNum; idx++) {
var recipe = my_booked_recipes[idx];
-
var title = escapeXml(recipe.title);
var desc = recipe.description;
var need_subs = recipe.needs_subscription;
diff --git a/application/templates/my.html b/application/templates/my.html
index 006f7a18..61fc9a2b 100644
--- a/application/templates/my.html
+++ b/application/templates/my.html
@@ -43,7 +43,7 @@
-
+
diff --git a/docker/gunicorn.conf.py b/docker/gunicorn.conf.py
index f575a151..5d167997 100644
--- a/docker/gunicorn.conf.py
+++ b/docker/gunicorn.conf.py
@@ -4,59 +4,63 @@
bind = "0.0.0.0:8000"
workers = 1
threads = 3
-capture_output = True
enable_stdio_inheritance = True
-#accesslog = "/data/gunicorn.access.log"
-#errorlog = "/data/gunicorn.error.log"
-#loglevel = "info"
#preload_app = True
certfile = os.getenv('GUNI_CERT')
keyfile = os.getenv('GUNI_KEY')
#example: https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py
-logconfig_dict = {
- 'version': 1,
- 'disable_existing_loggers': False,
- "root": {"level": "INFO", "handlers": ["error_file"]},
- 'loggers': {
- "gunicorn.error": {
- "level": "INFO",
- "handlers": ["error_file"],
- "propagate": False,
- "qualname": "gunicorn.error"
+if os.getenv('USE_DOCKER_LOGS') == 'yes':
+ accesslog = "/data/gunicorn.access.log"
+ loglevel = os.getenv.get('LOG_LEVEL') or 'info'
+else:
+ #accesslog = "/data/gunicorn.access.log"
+ #errorlog = "/data/gunicorn.error.log"
+ #loglevel = "info"
+ capture_output = True
+ logconfig_dict = {
+ 'version': 1,
+ 'disable_existing_loggers': False,
+ "root": {"level": "info", "handlers": ["error_file"]},
+ 'loggers': {
+ "gunicorn.error": {
+ "level": os.getenv.get('LOG_LEVEL') or 'info',
+ "handlers": ["error_file"],
+ "propagate": False,
+ "qualname": "gunicorn.error"
+ },
+ "gunicorn.access": {
+ "level": os.getenv.get('LOG_LEVEL') or 'info',
+ "handlers": ["access_file"],
+ "propagate": False,
+ "qualname": "gunicorn.access"
+ }
},
- "gunicorn.access": {
- "level": "INFO",
- "handlers": ["access_file"],
- "propagate": False,
- "qualname": "gunicorn.access"
- }
- },
- 'handlers': {
- "error_file": {
- "class": "logging.handlers.RotatingFileHandler",
- "maxBytes": 2*1024*1024, #2M, >20000lines
- "backupCount": 1,
- "formatter": "generic",
- "filename": "/data/gunicorn.error.log"
- },
- "access_file": {
- "class": "logging.handlers.RotatingFileHandler",
- "maxBytes": 500*1024, #500K >3000lines
- "backupCount": 1,
- "formatter": "access",
- "filename": "/data/gunicorn.access.log"
- }
- },
- 'formatters':{
- "generic": {
- "format": "[%(asctime)s] %(levelname)s [%(filename)s:%(lineno)s] %(message)s",
- "datefmt": "%Y-%m-%d %H:%M:%S %z",
- "class": "logging.Formatter"
+ 'handlers': {
+ "error_file": {
+ "class": "logging.handlers.RotatingFileHandler",
+ "maxBytes": 2*1024*1024, #2M, >20000lines
+ "backupCount": 1,
+ "formatter": "generic",
+ "filename": "/data/gunicorn.error.log"
+ },
+ "access_file": {
+ "class": "logging.handlers.RotatingFileHandler",
+ "maxBytes": 500*1024, #500K >3000lines
+ "backupCount": 1,
+ "formatter": "access",
+ "filename": "/data/gunicorn.access.log"
+ }
},
- "access": {
- "format": "%(message)s",
- "datefmt": "%Y-%m-%d %H:%M:%S %z",
- "class": "logging.Formatter"
+ 'formatters':{
+ "generic": {
+ "format": "[%(asctime)s] %(levelname)s [%(filename)s:%(lineno)s] %(message)s",
+ "datefmt": "%Y-%m-%d %H:%M:%S %z",
+ "class": "logging.Formatter"
+ },
+ "access": {
+ "format": "%(message)s",
+ "datefmt": "%Y-%m-%d %H:%M:%S %z",
+ "class": "logging.Formatter"
+ }
}
}
-}
diff --git a/docs/Chinese/deployment.md b/docs/Chinese/deployment.md
index 90426111..eba4aa98 100644
--- a/docs/Chinese/deployment.md
+++ b/docs/Chinese/deployment.md
@@ -173,11 +173,16 @@ sudo docker image prune -f
5. 需要查询日志文件
-
+5.1. 默认
```bash
tail -n 100 ./data/gunicorn.error.log
tail -n 100 ./data/gunicorn.access.log
```
+5.2. 设置环境变量后: `USE_DOCKER_LOGS='yes'`
+```bash
+docker logs container_name
+```
+
6. 如果不喜欢每次输入docker都使用sudo,可以将你的账号添加到docker用户组
@@ -198,6 +203,8 @@ sudo usermod -aG docker your-username
3.2.2 在"存储空间设置"里面添加一个文件夹映射到 `/data`,比如 `/docker/data` 映射到 `/data`,权限为"读取/写入"
4. 启动完成后使用 http://ip:8001 访问。
5. 如果需要链接分享功能,可以设置环境变量 `APP_DOMAIN`。
+6. 如果希望使用群晖网页管理页面的logs查看KindleEar的异常记录,可以设置环境变量 `USE_DOCKER_LOGS='yes'`。
+
diff --git a/docs/English/deployment.md b/docs/English/deployment.md
index bd520603..739cf117 100644
--- a/docs/English/deployment.md
+++ b/docs/English/deployment.md
@@ -178,12 +178,17 @@ sudo docker image prune -f
5. To check log files
-
+5.1. Default
```bash
tail -n 100 ./data/gunicorn.error.log
tail -n 100 ./data/gunicorn.access.log
```
+5.2. After setting the environment variable: `USE_DOCKER_LOGS='yes'`
+```bash
+docker logs container_name
+```
+
6. If you don't like using 'sudo' every time you use Docker, you can add your account to the 'docker' user group.
@@ -204,6 +209,8 @@ sudo usermod -aG docker your-username
3.2.2. In the "Volume Settings", add a folder mapped to `/data`, for example, map `/docker/data` to `/data`, with "Read/Write" permissions.
4. After starting, access it via http://ip:8001.
5. If you need the link sharing feature, you can set the environment variable `APP_DOMAIN`.
+6. To view KindleEar's error logs through the Synology web management interface, you can set the environment variable `USE_DOCKER_LOGS='yes'`.
+